'use client';

import { useEffect, useState } from "react";
import { RGPDRequest, RGPDSearchFilters, RGPDStats } from "../config/rgpd.types";
import {
  getRGPDRequests, createRGPDRequest, updateRGPDRequest, deleteRGPDRequest,
  getRGPDStats, updateRGPDRequestStatus
} from "../../api/rgpd";

export function useRGPD(filters?: RGPDSearchFilters) {
  const [requests, setRequests] = useState<RGPDRequest[]>([]);
  const [stats, setStats] = useState<RGPDStats | null>(null);

  const [loading, setLoading] = useState<boolean>(false);

  const [error, setError] = useState<string | null>(null);

  const fetchRequests = async () => {
    try {
      setLoading(true);

      const data = await getRGPDRequests(filters);

      setRequests(data);

      setError(null);
    } catch (err: any) {
      setError(err.message);
    } finally {
      setLoading(false);
    }
  };

  const fetchStats = async () => {
    try {
      const data = await getRGPDStats();

      setStats(data);
    } catch (err) {
      console.error(err);
    }
  };

  const createRequest = async (payload: any) => {
    const created = await createRGPDRequest(payload);

    await fetchRequests();

    return created;
  };

  const updateRequest = async (id: number, payload: any) => {
    const updated = await updateRGPDRequest(id, payload);

    await fetchRequests();

    return updated;
  };

  const updateRequestStatus = async (id: number, statut: string) => {
    const updated = await updateRGPDRequestStatus(id, statut);
    await fetchRequests();
    return updated;
  }

  const removeRequest = async (id: number) => {
    await deleteRGPDRequest(id);

    await fetchRequests();
  };

  useEffect(() => {
    fetchRequests();
    fetchStats();
  }, [JSON.stringify(filters)]);

  return {
    requests,
    stats,
    loading,
    error,

    fetchRequests,
    fetchStats,

    createRequest,
    updateRequest,
    updateRequestStatus,
    removeRequest
  };
}