import Breadcrumb from '@/components/Breadcrumbs/Breadcrumb';
import Container from '@/components/Forms/Container';
import ReactTable from '@/components/ReactTable/ReactTable';
import { cadastrarIsencaoGeracao } from '@/requests/CRUD/IsencaoGeracao/cadastrarIsencaoGeracao';
import { editarIsencao } from '@/requests/CRUD/IsencaoGeracao/editarIsencao';
import { listarIsencao } from '@/requests/CRUD/IsencaoGeracao/listarIsencao';
import { FormatFields } from '@/utils';
import _ from 'lodash';
import { useEffect, useState } from 'react';
import { FieldValues } from 'react-hook-form';
import FormIsencaoDeGeracao from './FormInsencaoDeGeracao';

const ConsultaIsencao = () => {
  const [totalList, setTotalList] = useState<any>(0);
  const dados = ['icms1', 'icms2', 'pis', 'cofins'];
  const columns = [
    {
      header: 'ID',
      accessorKey: 'id',
    },
    ...dados.map((e) => ({
      header: _.capitalize(e),
      accessorKey: e,
    })),
    {
      header: 'Status Isencao',
      accessorKey: 'status',
    },
  ];

  useEffect(() => {
    listarIsencao().then((e: any) => {
      setTotalList(e.length);
    });
  }, []);

  const formatarListaIsencao = (arr: any) => {
    return arr.map((isencao: any) => {
      dados.map((coluna) => {
        isencao[coluna] = FormatFields.formatarNumero(isencao[coluna]) + '%';
      });
      return isencao;
    });
  };

  const sendEditIsencaoDeGeracao = async (data: any) => {
    if (Object.keys(data).some((chave) => dados.includes(chave))) {
      dados.map((coluna) => {
        data[coluna] = FormatFields.desformatarNumeros(data[coluna]);
      });
    }
    return editarIsencao(data);
  };

  const onSubmitFunction = async (data: FieldValues) => {
    data['icms1_isencao'] = FormatFields.desformatarNumeros(
      data['icms1_isencao']
    );
    data['icms2_isencao'] = FormatFields.desformatarNumeros(
      data['icms2_isencao']
    );
    data['pis_isencao'] = FormatFields.desformatarNumeros(data['pis_isencao']);

    data['cofins_isencao'] = FormatFields.desformatarNumeros(
      data['cofins_isencao']
    );

    return cadastrarIsencaoGeracao(data);
  };

  return (
    <>
      {/*
       * OS: 323047
       * Data: 18/04/2024
       * Leonardo
       */
      /* <Breadcrumb pageName='Consulta de Insenção de Geração' /> */}
      <Container>
        <ReactTable
          columns={columns}
          listFunction={listarIsencao}
          formatFunction={formatarListaIsencao}
          idCol='id'
          isActiveCol='status'
          canEdit
          canDesactive
          editFunction={sendEditIsencaoDeGeracao}
          createFunction={
            totalList && totalList >= 1 ? undefined : onSubmitFunction
          }
          Form={FormIsencaoDeGeracao}
          pageName='Insenção de Geração'
        />
      </Container>
    </>
  );
};

export default ConsultaIsencao;
