import { listarOrigemCliente } from "@/requests/CRUD/Cliente/cadastroCliente";
import { listarClientesConsulta } from "@/requests/CRUD/Cliente/listarClientes";
import { listarTiposNegocios } from "@/requests/CRUD/TiposNegocios/listarTiposNegocios";
import { useRouter } from "next/router";
import {
  createContext,
  ReactNode,
  useContext,
  useEffect,
  useMemo,
  useState,
} from "react";

interface ICardContext {
  tiposNegocios: any[];
  origensClientes: any[];
  // notasCards: any[];
  tiposPessoas: any[];
  isLoading: boolean;
  listarCapaCard: () => void;
}

const CardContext = createContext<ICardContext | undefined>(undefined);

export const CardProvider = ({ children }: { children: ReactNode }) => {
  const [isLoading, setIsLoading] = useState<boolean>(false);
  const router = useRouter();
  const [tiposNegocios, setTiposNegocios] = useState<any[]>([]);
  const [origensClientes, setOrigensClientes] = useState<any[]>([]);
  // const [notasCards, setNotasCards] = useState<any[]>([]);
  const [tiposPessoas, setTiposPessoas] = useState<any[]>([]);

  const fetchALLCapa = async () => {
    setIsLoading(true);
    try {
      const [
        tipoNegocio,
        OrigemCliente,
        // notasCards,
        tipoPessoa,
      ] = await Promise.all([
        listarTiposNegocios(),
        listarOrigemCliente(),
        // listarTodasNotasCard(),
        listarClientesConsulta(),
      ]);

      setTiposNegocios(tipoNegocio);
      setTiposPessoas(tipoPessoa);
      setOrigensClientes(OrigemCliente);
      // setNotasCards(notasCards);
    } catch (error) {
      console.error("Erro ao listar dados:", error);
    } finally {
      setIsLoading(false);
    }
  };

  useEffect(() => {
    if (router.pathname !== "/") {
      fetchALLCapa();
    }
  }, []);

  const value = useMemo(
    () => ({
      tiposNegocios,
      origensClientes,
      // notasCards,
      tiposPessoas,
      isLoading,
      listarCapaCard: fetchALLCapa,
    }),
    [
      tiposNegocios,
      origensClientes,
      // notasCards,
      tiposPessoas,
      isLoading,
    ],
  );

  return <CardContext.Provider value={value}>{children}</CardContext.Provider>;
};

export const useCapaCard = () => {
  const context = useContext(CardContext);
  if (context === undefined) {
    throw new Error("useUsuarios deve ser usado dentro de um UsuarioProvider");
  }
  return context;
};
