import LoaderSun from "@/components/common/Loader/LoaderSun";
import { baixarAwsContent } from "@/requests/common/Aws/baixarAws";
import { obterTemplateContrato } from "@/requests/CRM/Contrato/obterTemplateContrato";
import { listarResponsabilidadesFinanceiras } from "@/requests/CRUD/ResponsabilidadesFinanceiras/listarResponsabilidadesFinanceiras";
import { getDateBrasil } from "@/utils";
import { Dispatch, useEffect, useState } from "react";
import FormTemplateGeracaoOS from "./FormTemplateGeracaoOS";

const FormRegeracaoOS = ({
  onSubmitFunction,
  dadosCard,
  children,
  usuarios,

  defaultValues,
  dadosCliente,
  proposta,

  contrato,
  reloadOrdensServico,
  buscaPropostas,
  compareActiveStep,
  setActiveStepAtual,
  activeStep,
  stepsTemp,
  setDadosNegocio,

  ordensServico,
  botoes,
  lojas,
  tipoServicoName,

  dataRegerar: dataFormGeracaoOS,
  ...rest
}: {
  [x: string]: any;
  setActiveStepAtual: Dispatch<any>;
}) => {
  const [agendamento, setAgendamento] = useState<any>();
  const [responsabilidaesFinanceiras, setResponsabilidaesFinanceiras] =
    useState<any[]>([]);
  const [isLoaded, setIsLoaded] = useState(false);

  const [templateOS, setTemplateOS] = useState("");
  const [isLoadingTemplateOS, setIsLoadingTemplateOS] = useState(true);
  const [isLoading, setIsLoading] = useState(false);
  // const [dataFormGeracaoOS, setDataFormGeracaoOS] = useState<any>();

  useEffect(() => {
    if (!agendamento) {
      setAgendamento({
        [`data_${tipoServicoName}_formatada`]: getDateBrasil(
          undefined,
          dataFormGeracaoOS?.data_servico_pvos
        ),
        [`data_final_${tipoServicoName}_formatada`]: getDateBrasil(
          undefined,
          dataFormGeracaoOS?.datafinal_servico_pvos
        ),
      });
      Promise.all([
        listarResponsabilidadesFinanceiras().then((res) =>
          setResponsabilidaesFinanceiras(res)
        ),
      ]).finally(() => setIsLoaded(true));
    } else {
      setIsLoaded(true);
    }

    obterTemplateContrato({
      id_tipo_negocio: dadosCard.tipoNegocio_coleta,
      id_loja: dadosCard.id_loja_coleta,
    })
      .then((res) =>
        baixarAwsContent(res?.caminho_templateOS_loja).then((templateString) =>
          setTemplateOS(templateString)
        )
      )
      .finally(() => {
        setIsLoadingTemplateOS(false);
      });
  }, []);

  return isLoaded ? (
    isLoadingTemplateOS ? (
      <div className="flex justify-center w-full">
        <LoaderSun />
      </div>
    ) : (
      <div>
        <FormTemplateGeracaoOS
          dadosCard={dadosCard}
          dadosCliente={dadosCliente}
          proposta={proposta}
          contrato={contrato}
          reloadOrdensServico={reloadOrdensServico}
          // camposPersonalizados={dataFormGeracaoOS}
          camposPersonalizados={{}}
          lojas={lojas}
          setActiveStepAtual={setActiveStepAtual}
          cronogramaInstalacao={[]}
          setIsLoading={setIsLoading}
          activeStep={activeStep}
          templateString={templateOS}
          ordensServico={ordensServico}
          dataFormGeracaoOS={dataFormGeracaoOS}
          agendamento={agendamento}
          usuarios={usuarios}
          responsabilidaesFinanceiras={responsabilidaesFinanceiras}
          botoes={botoes}
          tipoServicoName={tipoServicoName}
        />
      </div>
    )
  ) : (
    <div className="flex justify-center w-full">
      <LoaderSun />
    </div>
  );
};

export default FormRegeracaoOS;
