import Button from "@/components/Forms/Button";
import Container from "@/components/Forms/Container";
import InputSelectComponent from "@/components/Forms/InputSelect";
import ReactTable from "@/components/ReactTable/ReactTable";
import { cadastrarOrigens } from "@/requests/CRUD/Origens/cadastrarOrigens";
import { editarOrigens } from "@/requests/CRUD/Origens/editarOrigens";
import { excluirOrigem } from "@/requests/CRUD/Origens/excluirOrigem";
import { listarOrigens } from "@/requests/CRUD/Origens/listarOrigens";
import { useAuth } from "@/src/contexts/authContext";
import { GetForm } from "@/utils";
import { useState } from "react";
import { MdDelete } from "react-icons/md";
import Swal from "sweetalert2";
import FormOrigens from "./formOrigens";

const ConsultaOrigens = () => {
  const columns: any = [
    {
      header: "ID",
      accessorKey: "id_origem_cliente",
    },
    {
      header: "Descrição",
      accessorKey: "nome_origem_cliente",
    },
    {
      header: "Indicação",
      accessorKey: "indicacao_origem_cliente_label",
    },
    {
      header: "É Redes Social",
      accessorKey: "rede_social_origem_cliente",
    },
    {
      header: "Status Estrutura",
      accessorKey: "status_origem_cliente",
    },
  ];

  const [origensFilter, setOrigensFilter] = useState<any>({});
  const [tableKey, setTableKey] = useState(0);

  const { usuario } = useAuth();
  const form = GetForm();

  function formatIndicacaoOrigem(tipo: number) {
    switch (tipo) {
      case 0:
        return "Não é Indicação";
      case 1:
        return "Indicação Controlado pela Empresa";
      case 2:
        return "Indicação Controlado pelo Vendedor";
      default:
        return "";
    }
  }

  async function onSubmitFilter() {
    return listarOrigens(origensFilter);
  }

  return (
    <>
      {/*
       * OS: 323047
       * Data: 18/04/2024
       * Leonardo
       */}
      <Container>
        <div className="flex justify-center items-center mb-4 flex-col gap-3">
          <div className="flex flex-row flex-wrap gap-4">
            <InputSelectComponent
              name="indicacao_origem_cliente"
              label="Tipo de Indicação"
              formulario={form}
              options={[
                {
                  value: "*",
                  label: "Todos",
                },
                {
                  value: "0",
                  label: "Não é Indicação",
                },
                {
                  value: "1",
                  label: "Indicação Controlado pela Empresa",
                },
                {
                  value: "2",
                  label: "Indicação Controlado pelo Vendedor",
                },
              ]}
              // isMulti
              onChange={(e: any) => {
                setOrigensFilter((prev: any) => ({
                  ...prev,
                  indicacao_origem_cliente:
                    e?.value == "*" ? undefined : e?.value,
                }));
              }}
              defaultValue={"*"}
              width="flex-1 min-w-[300px]"
            />
            <InputSelectComponent
              name="rede_social_origem_cliente"
              label="É Rede Social?"
              formulario={form}
              options={[
                {
                  label: "Sim",
                  value: "1",
                },
                {
                  label: "Não",
                  value: "0",
                },
              ]}
              onChange={(e: any) => {
                setOrigensFilter((prev: any) => ({
                  ...prev,
                  rede_social_origem_cliente: e?.value,
                }));
              }}
              width="flex-1 min-w-[300px]"
            />
          </div>
          <Button
            type="button"
            onClick={() => {
              setTableKey((prev) => prev + 1);
              // onSubmitFilter();
            }}
          >
            Filtrar
          </Button>
        </div>
        <ReactTable
          key={tableKey}
          columns={columns}
          listFunction={onSubmitFilter}
          idCol="id_origem_cliente"
          isActiveCol="status_origem_cliente"
          formatFunction={(arr: any) =>
            arr.map((origem: any) => {
              origem["indicacao_origem_cliente_label"] = formatIndicacaoOrigem(
                Number(origem["indicacao_origem_cliente"]),
              );
              origem["rede_social_origem_cliente"] =
                origem["rede_social_origem_cliente"] == "1" ? "Sim" : "Não";
              return origem;
            })
          }
          canEdit
          canDesactive
          editFunction={editarOrigens}
          createFunction={cadastrarOrigens}
          Form={FormOrigens}
          pageName="Origens"
          actionButtons={(rowData: any, updateTable: any) => {
            const podeExcluir = rowData["pode_excluir"] === "1";
            return [
              {
                className: podeExcluir ? "buttonDanger" : "buttonDisabled",
                disabled: !podeExcluir,
                title: podeExcluir
                  ? "Excluir Origem"
                  : "Não é possível excluir: existem contatos vinculados a esta Origem",
                content: <MdDelete />,
                onClick: () => {
                  if (!podeExcluir) return;
                  Swal.fire({
                    title: "Confirmar Exclusão",
                    text: `Deseja excluir a Origem "${rowData["nome_origem_cliente"]}"? Esta ação não pode ser desfeita.`,
                    icon: "warning",
                    showCancelButton: true,
                    confirmButtonColor: "#d33",
                    cancelButtonColor: "#3085d6",
                    confirmButtonText: "Sim, excluir!",
                    cancelButtonText: "Cancelar",
                  }).then((result) => {
                    if (result.isConfirmed) {
                      excluirOrigem({
                        id_origem_cliente: rowData["id_origem_cliente"],
                        id_usuario_log: usuario?.id_usuario,
                      }).then(() => {
                        updateTable();
                      });
                    }
                  });
                },
              },
            ];
          }}
        />
      </Container>
    </>
  );
};

export default ConsultaOrigens;
