import CamposPersonalizados from "@/pages/CXESCRM002/kanbanProjeto/campos_personalizados";
import { gravarCamposPersonalizados } from "@/requests/CRUD/CamposPersonalizados/listarCamposPersonalizados";
import { useAuth } from "@/src/contexts/authContext";
import { useLoja } from "@/src/contexts/lojaContext";
import { useState } from "react";
import { toast } from "react-toastify";

export const useCamposPersonalizados = (
  idColeta?: string | number,
  idCard?: string | number,
) => {
  const { usuario } = useAuth();
  const gravacaoCamposPersonalizados = (dados: any, pendencia?: any) => {
    if (!idColeta) {
      toast.error("Erro ao obter coleta.");
      return Promise.resolve();
    }
    try {
      return gravarCamposPersonalizados({
        data: dados,
        coleta_id: idColeta,
        id_usuario: usuario.id_usuario,
        id_card: idCard,
        id_pendencia: pendencia,
      });
    } catch (e: any) {
      toast.error("Algo deu errado: ", e);
      return Promise.reject(e);
    }
  };

  const filterCamposPersonalizados = (data: any, pendencia?: any) => {
    const camposPersonalizadosKey = Object.fromEntries(
      Object.entries(data).filter(([key]) =>
        key.endsWith("_campo_personalizado") || key.endsWith("_cp"),
      ),
    );

    Object.keys(camposPersonalizadosKey).forEach((key) => {
      delete data[key];
    });
    gravacaoCamposPersonalizados(camposPersonalizadosKey, pendencia);
    return data;
  };
  const renderCamposPersonalizados = (
    local: string,
    form: any,
    pendencia: string,
    dadosCard: any,
    mostrarBotaoSalvar?: boolean,
    handleSubmit?: any,
    ignorarValoresGravados?: boolean,
  ) => {
    return (
      <CamposPersonalizados
        localCampo={local}
        idLoja={dadosCard?.id_loja_coleta}
        formulario={form}
        tipoNegocio={dadosCard?.tipoNegocio_coleta}
        handleSubmit={
          mostrarBotaoSalvar && handleSubmit ? handleSubmit : undefined
        }
        onSubmitFunction={(e: any) =>
          mostrarBotaoSalvar ? gravacaoCamposPersonalizados(e, pendencia) : null
        }
        dataCard={{ id_coleta_cliente: idColeta }}
        pendenciaID={Number(pendencia)}
        mostrarBotaoSalvar={mostrarBotaoSalvar}
        showBorderContainer
        ignorarValoresGravados={ignorarValoresGravados}
      />
    );
  };
  return {
    filterCamposPersonalizados,
    renderCamposPersonalizados,
    gravacaoCamposPersonalizados,
  };
};
