import Button from "@/components/Forms/Button";
import Input from "@/components/Forms/Input";
import InputSelectComponent from "@/components/Forms/InputSelect";
import { handleSweetAlert } from "@/components/Modal/SweetAlertConfirm";
import { options_days } from "@/pages/CXESCFG001/CondicoesPagamento/FormCondicoesPagamento";
import { listarInstBancarias } from "@/requests/CRUD/InstBancarias/listarInstBancarias";
import {
  formatarValor,
  FormatFields,
  getDateBrasil,
  mesesEntreDatas,
} from "@/utils";
import katex from "katex";
import "katex/dist/katex.min.css";
import { Info } from "lucide-react";
import { useEffect, useState } from "react";
import * as yup from "yup";
import InputParcelaPersonalizada from "./InputParcelaPersonalizada";

function getDataParcelaComDiaFixo(
  dataInicio: string,
  incrementoMeses: number,
  dia: number
) {
  const data = new Date(dataInicio?.split("-") as any);
  // Zera o dia antes de mudar o mês: se o dia original (ex: 31) não existir
  // no mês de destino (ex: setembro), o JS estoura pro mês seguinte antes do
  // setDate(dia) corrigir, fazendo a parcela cair um mês à frente do certo.
  data.setDate(1);
  data.setMonth(data.getMonth() + incrementoMeses);
  data.setDate(dia);

  const ano = data.getFullYear();
  const mes = String(data.getMonth() + 1).padStart(2, "0");
  const diaFormatado = String(data.getDate()).padStart(2, "0");
  return `${ano}-${mes}-${diaFormatado}`;
}

export default function InputsFormPagamentoProposta({
  condicoesPagamento,
  formasPagamento,
  loja,
  contasBancariasLojas,
  dadosCard,
  proposta,
  condicaoPagamentoCustom,
  formaPagamentoPadrao,
  form,
  usuario,
  setFormaPagamentoSelecionada,
  formaPagamentoSelecionada,
  setDataPriVcto_pagamento_proposta,
  setValorTotalProjeto,
  setSaldoDevedorPersonalizado,
  setHandleSubmits,
}: any) {
  const formPagamento = form;
  const formWatch = formPagamento.watch();
  const cleanValues = formPagamento.cleanValues;

  const [saldoDevedorCalculado, setSaldoDevedorCalculado] =
    useState<any>(undefined);
  const [saldoDevedorCalculadoEntrada, setSaldoDevedorCalculadoEntrada] =
    useState<any>(undefined);

  const [instituicoesBancarias, setInstituicoesBancarias] = useState<any[]>([]);

  useEffect(() => {
    listarInstBancarias().then(setInstituicoesBancarias);
  }, []);

  // handleSubmits das parcelas do saldo e da entrada ficam em arrays locais
  // separados (cada lista reinicia seu próprio índice em 0) e só depois são
  // combinados e enviados pro setHandleSubmits do pai — assim uma lista não
  // sobrescreve/trunca os slots da outra no array compartilhado.
  const [handleSubmitsSaldo, setHandleSubmitsSaldo] = useState<any[]>([]);
  const [handleSubmitsEntrada, setHandleSubmitsEntrada] = useState<any[]>([]);

  useEffect(() => {
    setHandleSubmits?.([...handleSubmitsSaldo, ...handleSubmitsEntrada]);
  }, [handleSubmitsSaldo, handleSubmitsEntrada]);

  const condicaoSelecionadaAtual = formWatch?.codCondicao_pagamento_proposta;
  // const personalizadaAtual = condicaoSelecionadaAtual?.value == "0";
  // const tipoCondicaoAtual = personalizadaAtual
  //   ? formWatch?.tipo_condicao_proposta?.value
  //   : condicaoSelecionadaAtual?.tipo_condicao;

  const [parcelasPersonalizadas, setParcelasPersonalizadas] = useState<any[]>(
    proposta.parcelasPersonalizadas || []
  );

  // useEffect(() => {
  //   if (
  //     cleanValues.codCondicao_pagamento_proposta &&
  //     cleanValues.codCondicao_pagamento_proposta !== "0"
  //   ) {
  //     // form.setValue(
  //     //   "tipo_condicao_proposta",
  //     //   tiposCondicoes?.find(
  //     //     (tipo) =>
  //     //       tipo.value ==
  //     //       formWatch.codCondicao_pagamento_proposta?.tipo_condicao
  //     //   )
  //     // );
  //     form.setValue(
  //       "qtdParcelas_condicao_proposta",
  //       formWatch.codCondicao_pagamento_proposta?.qtdParcelas_condicao
  //     );
  //     form.setValue(
  //       "taxa_juros_condicao_proposta",
  //       formWatch.codCondicao_pagamento_proposta?.taxa_juros_condicao
  //     );
  //     // form.setValue(
  //     //   "periodicidade_condicao_proposta",
  //     //   [
  //     //     {
  //     //       value: "DAY",
  //     //       label: "Diário",
  //     //     },
  //     //     {
  //     //       value: "WEEK",
  //     //       label: "Semanal",
  //     //     },
  //     //     {
  //     //       value: "MONTH",
  //     //       label: "Mensal",
  //     //     },
  //     //     {
  //     //       value: "YEAR",
  //     //       label: "Anual",
  //     //     },
  //     //   ].find(
  //     //     (option) =>
  //     //       option.value ==
  //     //       formWatch.codCondicao_pagamento_proposta?.periodicidade_condicao
  //     //   )
  //     // );
  //   }
  // }, [cleanValues.codCondicao_pagamento_proposta]);

  useEffect(() => {
    if (
      condicaoSelecionadaAtual
      // && tipoCondicaoAtual
    ) {
      // if (!["2", "3"].includes(tipoCondicaoAtual)) {
      //   setParcelasPersonalizadas([]);
      //   setHandleSubmits?.([]);
      //   return;
      // }

      const qtdParcelas_condicao_proposta = Object.keys(cleanValues).includes(
        "qtdParcelas_condicao_proposta"
      )
        ? cleanValues.qtdParcelas_condicao_proposta || 0
        : Number(proposta.qtdParcelas_condicao_proposta) || 0;
      const emptyParcela = {
        data_parcela_proposta: "",
        valor_parcela_proposta: "",
      };
      // Parcela 1 começa na data do Início do Parcelamento (é ali que se
      // informa uma eventual carência) — só quando ela ainda não existe,
      // pra não sobrescrever uma data já digitada pelo usuário.
      const primeiraParcelaPadrao = {
        data_parcela_proposta:
          cleanValues.data_inicio_parcelamento_pagamento_proposta || "",
        valor_parcela_proposta: "",
      };

      setParcelasPersonalizadas((prev) =>
        Array.from({ length: qtdParcelas_condicao_proposta }).map(
          (_, indexParcela) => {
            return (
              prev[indexParcela] ||
              (indexParcela === 0 ? primeiraParcelaPadrao : emptyParcela)
            );
          }
        )
      );
      setHandleSubmitsSaldo((prev: any[]) =>
        prev.slice(0, qtdParcelas_condicao_proposta)
      );
    }
  }, [
    cleanValues.codCondicao_pagamento_proposta,
    // cleanValues.tipo_condicao_proposta,
    cleanValues.qtdParcelas_condicao_proposta,
  ]);

  useEffect(() => {
    form.setValue("parcelasPersonalizadas", parcelasPersonalizadas);
  }, [parcelasPersonalizadas]);

  const [parcelasPersonalizadasEntrada, setParcelasPersonalizadasEntrada] =
    useState<any[]>(proposta.parcelasPersonalizadasEntrada || []);

  const condicaoEntradaSelecionadaAtual =
    formWatch?.codCondicao_pagamento_entrada_proposta;

  useEffect(() => {
    if (
      cleanValues.codCondicao_pagamento_entrada_proposta &&
      cleanValues.codCondicao_pagamento_entrada_proposta !== "0"
    ) {
      form.setValue(
        "qtdParcelas_condicao_entrada_proposta",
        formWatch.codCondicao_pagamento_entrada_proposta?.qtdParcelas_condicao
      );
      form.setValue(
        "taxa_juros_condicao_entrada_proposta",
        formWatch.codCondicao_pagamento_entrada_proposta?.taxa_juros_condicao
      );
    }
  }, [cleanValues.codCondicao_pagamento_entrada_proposta]);

  useEffect(() => {
    if (condicaoEntradaSelecionadaAtual) {
      const qtdParcelas_condicao_entrada_proposta = Object.keys(
        cleanValues
      ).includes("qtdParcelas_condicao_entrada_proposta")
        ? cleanValues.qtdParcelas_condicao_entrada_proposta || 0
        : Number(proposta.qtdParcelas_condicao_entrada_proposta) || 0;
      const emptyParcela = {
        data_parcela_proposta: "",
        valor_parcela_proposta: "",
      };
      // Parcela 1 da entrada começa na data do Prazo da Entrada (é ali que se
      // informa uma eventual carência) — só quando ela ainda não existe, pra
      // não sobrescrever uma data já digitada pelo usuário.
      const primeiraParcelaPadrao = {
        data_parcela_proposta:
          cleanValues.data_entrada_pagamento_proposta || "",
        valor_parcela_proposta: "",
      };

      setParcelasPersonalizadasEntrada((prev) =>
        Array.from({ length: qtdParcelas_condicao_entrada_proposta }).map(
          (_, indexParcela) => {
            return (
              prev[indexParcela] ||
              (indexParcela === 0 ? primeiraParcelaPadrao : emptyParcela)
            );
          }
        )
      );
      setHandleSubmitsEntrada((prev: any[]) =>
        prev.slice(0, qtdParcelas_condicao_entrada_proposta)
      );
    }
  }, [
    cleanValues.codCondicao_pagamento_entrada_proposta,
    cleanValues.qtdParcelas_condicao_entrada_proposta,
  ]);

  useEffect(() => {
    form.setValue(
      "parcelasPersonalizadasEntrada",
      parcelasPersonalizadasEntrada
    );
  }, [parcelasPersonalizadasEntrada]);

  const handleChangeParcelaEntrada = (numParcela: number, novaParcela: any) => {
    setParcelasPersonalizadasEntrada((prev) =>
      prev.map((parcela, indexParcela) =>
        indexParcela == numParcela ? { ...parcela, ...novaParcela } : parcela
      )
    );
  };

  const handleChangeParcela = (numParcela: number, novaParcela: any) => {
    setParcelasPersonalizadas((prev) =>
      prev.map((parcela, indexParcela) =>
        indexParcela == numParcela ? { ...parcela, ...novaParcela } : parcela
      )
    );
  };

  function getDadosCondicaoPersonalizada() {
    const condicaoSelecionada = formWatch?.codCondicao_pagamento_proposta;
    // const personalizada = condicaoSelecionada?.value == "0";
    const qtdParcelas = Number(formWatch?.qtdParcelas_condicao_proposta) || 0;
    const taxaJuros = Number(
      FormatFields.desformatarNumeros(
        formWatch?.taxa_juros_condicao_proposta || 0
      )
    );
    const entrada =
      Number(
        FormatFields.desformatarNumeros(formWatch?.valor_entrada_proposta || 0)
      ) || 0;
    const valorParcelamento = +proposta?.valorTotal_proposta - entrada;

    return { qtdParcelas, taxaMensal: taxaJuros / 100, valorParcelamento };
  }

  function getDadosCondicaoPersonalizadaEntrada() {
    const qtdParcelas =
      Number(formWatch?.qtdParcelas_condicao_entrada_proposta) || 0;
    const taxaJuros = Number(
      FormatFields.desformatarNumeros(
        formWatch?.taxa_juros_condicao_entrada_proposta || 0
      )
    );
    const valorParcelamento =
      Number(
        FormatFields.desformatarNumeros(formWatch?.valor_entrada_proposta || 0)
      ) || 0;

    return { qtdParcelas, taxaMensal: taxaJuros / 100, valorParcelamento };
  }

  function atualizaCondicaoDePagamento() {
    const dataInicioParcelamento =
      cleanValues.data_inicio_parcelamento_pagamento_proposta;
    if (!dataInicioParcelamento) return;

    const condicaoSelecionada = formWatch?.codCondicao_pagamento_proposta;
    if (!condicaoSelecionada) return;

    const nomeCondicao = condicaoSelecionada?.nome_condicao;

    const primeiroVencimento = new Date(
      dataInicioParcelamento?.split("-") as any
    );

    const parcelasAtuais = formWatch?.parcelasPersonalizadas || [];

    const qtdParcelas = Number(formWatch?.qtdParcelas_condicao_proposta) || 0;
    const taxaJuros =
      Number(
        FormatFields.desformatarNumeros(
          formWatch?.taxa_juros_condicao_proposta || 0
        )
      ) || 0;
    const taxaMensal = taxaJuros / 100;

    const possuiEntrada = cleanValues.posui_entrada_proposta == "1";
    const valorEntrada = possuiEntrada
      ? Number(
          FormatFields.desformatarNumeros(
            formWatch?.valor_entrada_proposta || 0
          )
        ) || 0
      : 0;

    const valorParcelamento = +proposta?.valorTotal_proposta - valorEntrada;

    const parcelasConsideradas = parcelasAtuais.slice(0, qtdParcelas);

    // Saldo devedor decrescente: cada parcela primeiro acumula juros sobre
    // o saldo restante até sua data, depois abate o valor pago naquela parcela.
    // Pagar mais numa parcela reduz o saldo (e os juros) das parcelas seguintes.
    let saldoDevedor = valorParcelamento;
    let dataAnterior = primeiroVencimento;
    let todasParcelasPreenchidas =
      qtdParcelas > 0 && parcelasConsideradas.length == qtdParcelas;

    for (const parcela of parcelasConsideradas) {
      if (!parcela?.data_parcela_proposta || !parcela?.valor_parcela_proposta) {
        todasParcelasPreenchidas = false;
        break;
      }

      const dataParcela = new Date(
        parcela.data_parcela_proposta?.split("-") as any
      );
      const mesesDecorridos = mesesEntreDatas(dataAnterior, dataParcela);

      saldoDevedor =
        saldoDevedor * Math.pow(1 + taxaMensal, mesesDecorridos) -
        Number(
          FormatFields.desformatarNumeros(parcela.valor_parcela_proposta || 0)
        );
      dataAnterior = dataParcela;
    }

    const saldoDevedorFinal = todasParcelasPreenchidas
      ? saldoDevedor
      : undefined;

    setSaldoDevedorCalculado(saldoDevedorFinal);
    setSaldoDevedorPersonalizado?.(saldoDevedorFinal);

    const parcelasValidas = parcelasAtuais.filter(
      (parcela: any) =>
        parcela?.data_parcela_proposta && parcela?.valor_parcela_proposta
    );

    const somaParcelasDigitadas = parcelasValidas.reduce(
      (soma: number, parcela: any) =>
        soma +
        Number(
          FormatFields.desformatarNumeros(parcela.valor_parcela_proposta || 0)
        ),
      0
    );

    const descricaoParcelas = parcelasValidas
      .map(
        (parcela: any, indiceParcela: number) =>
          `\n${indiceParcela + 1}ª parcela de ${formatarValor(
            Number(
              FormatFields.desformatarNumeros(
                parcela.valor_parcela_proposta || 0
              )
            )
          )} na data ${FormatFields.formatarDataCalendar(
            new Date(parcela.data_parcela_proposta?.split("-") as any)
          )}`
      )
      .join(",");

    // Entrada: quando tem sua própria condição de pagamento (parcelada,
    // igual ao saldo), calcula o saldo devedor dela do mesmo jeito. Sem
    // condição selecionada, cai no texto simples de sempre (data + valor
    // únicos).
    const dataEntradaBase = cleanValues.data_entrada_pagamento_proposta
      ? new Date(cleanValues.data_entrada_pagamento_proposta?.split("-") as any)
      : undefined;
    const dataEntradaFormatada = dataEntradaBase
      ? FormatFields.formatarDataCalendar(dataEntradaBase)
      : "";

    const condicaoEntradaSelecionada =
      formWatch?.codCondicao_pagamento_entrada_proposta;
    const nomeCondicaoEntrada = condicaoEntradaSelecionada?.nome_condicao;

    const parcelasEntradaAtuais =
      formWatch?.parcelasPersonalizadasEntrada || [];
    const qtdParcelasEntrada =
      Number(formWatch?.qtdParcelas_condicao_entrada_proposta) || 0;
    const taxaJurosEntrada =
      Number(
        FormatFields.desformatarNumeros(
          formWatch?.taxa_juros_condicao_entrada_proposta || 0
        )
      ) || 0;
    const taxaMensalEntrada = taxaJurosEntrada / 100;

    const parcelasEntradaConsideradas = parcelasEntradaAtuais.slice(
      0,
      qtdParcelasEntrada
    );

    let saldoDevedorEntrada = valorEntrada;
    let dataAnteriorEntrada = dataEntradaBase;
    let todasParcelasEntradaPreenchidas =
      qtdParcelasEntrada > 0 &&
      parcelasEntradaConsideradas.length == qtdParcelasEntrada;

    if (dataAnteriorEntrada) {
      for (const parcela of parcelasEntradaConsideradas) {
        if (
          !parcela?.data_parcela_proposta ||
          !parcela?.valor_parcela_proposta
        ) {
          todasParcelasEntradaPreenchidas = false;
          break;
        }

        const dataParcela = new Date(
          parcela.data_parcela_proposta?.split("-") as any
        );
        const mesesDecorridos = mesesEntreDatas(
          dataAnteriorEntrada,
          dataParcela
        );

        saldoDevedorEntrada =
          saldoDevedorEntrada *
            Math.pow(1 + taxaMensalEntrada, mesesDecorridos) -
          Number(
            FormatFields.desformatarNumeros(parcela.valor_parcela_proposta || 0)
          );
        dataAnteriorEntrada = dataParcela;
      }
    } else {
      todasParcelasEntradaPreenchidas = false;
    }

    const saldoDevedorEntradaFinal = todasParcelasEntradaPreenchidas
      ? saldoDevedorEntrada
      : undefined;

    setSaldoDevedorCalculadoEntrada(saldoDevedorEntradaFinal);

    const parcelasEntradaValidas = parcelasEntradaAtuais.filter(
      (parcela: any) =>
        parcela?.data_parcela_proposta && parcela?.valor_parcela_proposta
    );

    const somaParcelasEntradaDigitadas = parcelasEntradaValidas.reduce(
      (soma: number, parcela: any) =>
        soma +
        Number(
          FormatFields.desformatarNumeros(parcela.valor_parcela_proposta || 0)
        ),
      0
    );

    const descricaoParcelasEntrada = parcelasEntradaValidas
      .map(
        (parcela: any, indiceParcela: number) =>
          `\n${indiceParcela + 1}ª parcela de ${formatarValor(
            Number(
              FormatFields.desformatarNumeros(
                parcela.valor_parcela_proposta || 0
              )
            )
          )} na data ${FormatFields.formatarDataCalendar(
            new Date(parcela.data_parcela_proposta?.split("-") as any)
          )}`
      )
      .join(",");

    setValorTotalProjeto?.(
      (descricaoParcelasEntrada ? somaParcelasEntradaDigitadas : valorEntrada) +
        somaParcelasDigitadas
    );

    const formaPagamentoEntrada =
      formWatch?.forma_pagamento_entrada_proposta?.value;
    const formaPagamentoSaldo = formWatch?.forma_pagamento_proposta?.value;

    const instituicaoEntradaTexto =
      formWatch?.forma_pagamento_entrada_proposta?.exige_instituicao_forma ==
        "1" && formWatch?.instituicao_entrada_proposta?.label
        ? ` na Instituição ${formWatch.instituicao_entrada_proposta.label}`
        : "";

    const instituicaoSaldoTexto =
      formWatch?.forma_pagamento_proposta?.exige_instituicao_forma == "1" &&
      formWatch?.instituicao_saldo_proposta?.label
        ? ` na Instituição ${formWatch.instituicao_saldo_proposta.label}`
        : "";

    const entradaTexto =
      valorEntrada > 0
        ? descricaoParcelasEntrada
          ? `Entrada na condição ${nomeCondicaoEntrada} em ${qtdParcelasEntrada}x${
              formaPagamentoEntrada ? ` via ${formaPagamentoEntrada}` : ""
            }${instituicaoEntradaTexto}: ${descricaoParcelasEntrada}`
          : `Entrada de ${formatarValor(valorEntrada)}${
              formaPagamentoEntrada ? ` via ${formaPagamentoEntrada}` : ""
            }${instituicaoEntradaTexto} na data ${dataEntradaFormatada}`
        : "";

    const saldoTexto = descricaoParcelas
      ? `Saldo na condição ${nomeCondicao} em ${qtdParcelas}x${
          formaPagamentoSaldo ? ` via ${formaPagamentoSaldo}` : ""
        }${instituicaoSaldoTexto}: ${descricaoParcelas}`
      : "";

    const condicaoDePagamento = [entradaTexto, saldoTexto]
      .filter(Boolean)
      .join(".\n");

    formPagamento.setValue(
      "informacoes_pagamento_proposta",
      condicaoDePagamento
    );
  }

  useEffect(() => {
    atualizaCondicaoDePagamento();
  }, [
    cleanValues.data_inicio_parcelamento_pagamento_proposta,
    cleanValues.data_entrada_pagamento_proposta,
    cleanValues.posui_entrada_proposta,
    cleanValues.valor_entrada_proposta,
    cleanValues.codCondicao_pagamento_proposta,
    cleanValues.qtdParcelas_condicao_proposta,
    cleanValues.taxa_juros_condicao_proposta,
    cleanValues.parcelasPersonalizadas,
    cleanValues.codCondicao_pagamento_entrada_proposta,
    cleanValues.qtdParcelas_condicao_entrada_proposta,
    cleanValues.taxa_juros_condicao_entrada_proposta,
    cleanValues.parcelasPersonalizadasEntrada,
    cleanValues.forma_pagamento_proposta,
    cleanValues.forma_pagamento_entrada_proposta,
    cleanValues.instituicao_entrada_proposta,
    cleanValues.instituicao_saldo_proposta,
  ]);

  function preencherParcelasIguais() {
    const { qtdParcelas, taxaMensal, valorParcelamento } =
      getDadosCondicaoPersonalizada();
    if (!qtdParcelas) return;

    const parcelasConsideradas = parcelasPersonalizadas.slice(0, qtdParcelas);
    const parcelaSemData = parcelasConsideradas.find(
      (parcela) => !parcela?.data_parcela_proposta
    );
    if (parcelaSemData) {
      handleSweetAlert({
        icon: "warning",
        title: "Faltam datas das parcelas",
        html: "Informe a data de todas as parcelas antes de calcular valores iguais que fecham a dívida",
        showDenyButton: false,
        confirmButtonText: "Ok",
      });
      return;
    }

    // Valor de parcela igual que fecha o saldo devedor considerando os juros
    // entre as datas reais informadas (não assume periodicidade regular).
    let dataAnterior = new Date(
      cleanValues.data_inicio_parcelamento_pagamento_proposta?.split("-") as any
    );

    const fatores = parcelasConsideradas.map((parcela) => {
      const dataParcela = new Date(
        parcela.data_parcela_proposta?.split("-") as any
      );
      const mesesDecorridos = mesesEntreDatas(dataAnterior, dataParcela);
      const fator = Math.pow(1 + taxaMensal, mesesDecorridos);
      dataAnterior = dataParcela;
      return fator;
    });

    const produtoTotal = fatores.reduce((produto, fator) => produto * fator, 1);

    let somaPesos = 0;
    let pesoAcumulado = 1;
    for (let indice = fatores.length - 1; indice >= 0; indice--) {
      somaPesos += pesoAcumulado;
      pesoAcumulado *= fatores[indice];
    }

    const valorParcela = (valorParcelamento * produtoTotal) / somaPesos;
    // const valorFormatado = FormatFields.formatarNumero(valorParcela);

    parcelasConsideradas.forEach((_, indiceParcela) => {
      handleChangeParcela(indiceParcela, {
        valor_parcela_proposta: valorParcela,
      });
    });
  }

  function preencherUltimaParcela() {
    const { qtdParcelas, taxaMensal, valorParcelamento } =
      getDadosCondicaoPersonalizada();
    if (!qtdParcelas) return;
    if (qtdParcelas == 1) {
      return preencherParcelasIguais();
    }

    const ultimaParcela = parcelasPersonalizadas[qtdParcelas - 1];
    if (!ultimaParcela?.data_parcela_proposta) {
      handleSweetAlert({
        icon: "warning",
        title: "Falta a data da última parcela",
        html: "Informe a data da última parcela antes de calcular o valor que fecha a dívida",
        showDenyButton: false,
        confirmButtonText: "Ok",
      });
      return;
    }

    const parcelasAnteriores = parcelasPersonalizadas.slice(0, qtdParcelas - 1);
    const parcelaIncompleta = parcelasAnteriores.find(
      (parcela) =>
        !parcela?.data_parcela_proposta || !parcela?.valor_parcela_proposta
    );
    if (parcelaIncompleta) {
      handleSweetAlert({
        icon: "warning",
        title: "Faltam dados nas parcelas anteriores",
        html: "Informe data e valor de todas as parcelas anteriores antes de calcular o valor que fecha a dívida",
        showDenyButton: false,
        confirmButtonText: "Ok",
      });
      return;
    }

    let saldoDevedor = valorParcelamento;
    let dataAnterior = new Date(
      cleanValues.data_inicio_parcelamento_pagamento_proposta?.split("-") as any
    );

    for (const parcela of parcelasAnteriores) {
      const dataParcela = new Date(
        parcela.data_parcela_proposta?.split("-") as any
      );
      const mesesDecorridos = mesesEntreDatas(dataAnterior, dataParcela);

      saldoDevedor =
        saldoDevedor * Math.pow(1 + taxaMensal, mesesDecorridos) -
        Number(
          FormatFields.desformatarNumeros(parcela.valor_parcela_proposta || 0)
        );
      dataAnterior = dataParcela;
    }

    const dataUltimaParcela = new Date(
      ultimaParcela.data_parcela_proposta?.split("-") as any
    );
    const mesesAteUltima = mesesEntreDatas(dataAnterior, dataUltimaParcela);

    const valorNecessario =
      saldoDevedor * Math.pow(1 + taxaMensal, mesesAteUltima);

    handleChangeParcela(qtdParcelas - 1, {
      valor_parcela_proposta: Math.max(valorNecessario, 0),
    });
  }

  function preencherParcelasIguaisEntrada() {
    const { qtdParcelas, taxaMensal, valorParcelamento } =
      getDadosCondicaoPersonalizadaEntrada();
    if (!qtdParcelas) return;

    const parcelasConsideradas = parcelasPersonalizadasEntrada.slice(
      0,
      qtdParcelas
    );
    const parcelaSemData = parcelasConsideradas.find(
      (parcela) => !parcela?.data_parcela_proposta
    );
    if (parcelaSemData) {
      handleSweetAlert({
        icon: "warning",
        title: "Faltam datas das parcelas",
        html: "Informe a data de todas as parcelas antes de calcular valores iguais que fecham a dívida",
        showDenyButton: false,
        confirmButtonText: "Ok",
      });
      return;
    }

    let dataAnterior = new Date(
      cleanValues.data_entrada_pagamento_proposta?.split("-") as any
    );

    const fatores = parcelasConsideradas.map((parcela) => {
      const dataParcela = new Date(
        parcela.data_parcela_proposta?.split("-") as any
      );
      const mesesDecorridos = mesesEntreDatas(dataAnterior, dataParcela);
      const fator = Math.pow(1 + taxaMensal, mesesDecorridos);
      dataAnterior = dataParcela;
      return fator;
    });

    const produtoTotal = fatores.reduce((produto, fator) => produto * fator, 1);

    let somaPesos = 0;
    let pesoAcumulado = 1;
    for (let indice = fatores.length - 1; indice >= 0; indice--) {
      somaPesos += pesoAcumulado;
      pesoAcumulado *= fatores[indice];
    }

    const valorParcela = (valorParcelamento * produtoTotal) / somaPesos;
    // const valorFormatado = FormatFields.formatarNumero(valorParcela);

    parcelasConsideradas.forEach((_, indiceParcela) => {
      handleChangeParcelaEntrada(indiceParcela, {
        valor_parcela_proposta: valorParcela,
      });
    });
  }

  function preencherUltimaParcelaEntrada() {
    const { qtdParcelas, taxaMensal, valorParcelamento } =
      getDadosCondicaoPersonalizadaEntrada();
    if (!qtdParcelas) return;
    if (qtdParcelas == 1) {
      return preencherParcelasIguaisEntrada();
    }

    const ultimaParcela = parcelasPersonalizadasEntrada[qtdParcelas - 1];
    if (!ultimaParcela?.data_parcela_proposta) {
      handleSweetAlert({
        icon: "warning",
        title: "Falta a data da última parcela",
        html: "Informe a data da última parcela antes de calcular o valor que fecha a dívida",
        showDenyButton: false,
        confirmButtonText: "Ok",
      });
      return;
    }

    const parcelasAnteriores = parcelasPersonalizadasEntrada.slice(
      0,
      qtdParcelas - 1
    );
    const parcelaIncompleta = parcelasAnteriores.find(
      (parcela) =>
        !parcela?.data_parcela_proposta || !parcela?.valor_parcela_proposta
    );
    if (parcelaIncompleta) {
      handleSweetAlert({
        icon: "warning",
        title: "Faltam dados nas parcelas anteriores",
        html: "Informe data e valor de todas as parcelas anteriores antes de calcular o valor que fecha a dívida",
        showDenyButton: false,
        confirmButtonText: "Ok",
      });
      return;
    }

    let saldoDevedor = valorParcelamento;
    let dataAnterior = new Date(
      cleanValues.data_entrada_pagamento_proposta?.split("-") as any
    );

    for (const parcela of parcelasAnteriores) {
      const dataParcela = new Date(
        parcela.data_parcela_proposta?.split("-") as any
      );
      const mesesDecorridos = mesesEntreDatas(dataAnterior, dataParcela);

      saldoDevedor =
        saldoDevedor * Math.pow(1 + taxaMensal, mesesDecorridos) -
        Number(
          FormatFields.desformatarNumeros(parcela.valor_parcela_proposta || 0)
        );
      dataAnterior = dataParcela;
    }

    const dataUltimaParcela = new Date(
      ultimaParcela.data_parcela_proposta?.split("-") as any
    );
    const mesesAteUltima = mesesEntreDatas(dataAnterior, dataUltimaParcela);

    const valorNecessario =
      saldoDevedor * Math.pow(1 + taxaMensal, mesesAteUltima);

    handleChangeParcelaEntrada(qtdParcelas - 1, {
      valor_parcela_proposta: Math.max(valorNecessario, 0),
    });
  }

  return (
    <div
      className="flex flex-col gap-5"
      // onSubmit={handlePagamento(onSubmitFormPagamentoProposta)}
    >
      <div className="flex flex-row flex-wrap gap-4">
        <InputSelectComponent
          name="codConta_pagamento_proposta"
          label="Conta de Pagamento"
          options={contasBancariasLojas.map((conta: any) => ({
            ...conta,
            value: conta.id_conta_loja,
            label: conta.chavePix_conta_loja,
            // label: Object.values(conta)?.join(" "),
          }))}
          formulario={formPagamento}
          required
          error="Informe a Conta de Pagamento"
          defaultValue={
            (proposta && proposta?.codConta_pagamento_proposta) ||
            (loja && loja?.cod_conta_padrao_loja)
          }
          disabled={usuario?.permite_alterar_conta_bancaria_usuario != "1"}
          formatOptionLabel={(conta) => (
            <div className="border p-1 shadow-sm bg-black-2/[0.04] font-semibold">
              <div>{`Pix: ${conta.chavePix_conta_loja}`}</div>
              <div>
                {`${conta?.codCompensacao_inst_bancaria ? `${conta?.codCompensacao_inst_bancaria} - ` : ""}(${conta?.nome_inst_bancaria})`}
              </div>
              <div>Agência: {conta.nrAgencia_conta_loja}</div>
              <div>Nº Conta: {conta.numero_conta_loja}</div>
            </div>
          )}
          width="min-w-[400px] flex-1"
        />
        <div className="w-full flex flex-row gap-3">
          <InputSelectComponent
            name="posui_entrada_proposta"
            label="Possui Entrada?"
            options={[
              {
                label: "Sim",
                value: "1",
              },
              {
                label: "Não",
                value: "0",
              },
            ]}
            formulario={formPagamento}
            defaultValue={proposta?.posui_entrada_proposta || "0"}
            width="w-fit"
          />
        </div>
        {cleanValues.posui_entrada_proposta == "1" && (
          <fieldset className="border-2 border-black-2 p-2 rounded-lg w-full flex flex-row flex-wrap gap-4">
            <legend className="text-sm font-semibold text-gray-600 px-2">
              Entrada
            </legend>
            <InputSelectComponent
              name="forma_pagamento_entrada_proposta"
              // label="Forma de Pagamento da Entrada"
              label={
                <div className="w-fit flex flex-row gap-1">
                  <div>{"Forma de Pagamento da Entrada"}</div>
                  <div className="px-1">
                    <Button
                      type="button"
                      className={` bg-primary flex flex-row gap-2 rounded-full p-0`}
                      onClick={(e: any) => {
                        e.stopPropagation();
                        handleSweetAlert({
                          icon: "info",
                          title: "Forma de Pagamento da Entrada",
                          showDenyButton: false,
                          confirmButtonText: "Ok",
                          html: (
                            <div className="flex flex-col gap-2">
                              ATENÇÃO!! Só serão listadas aqui as formas de
                              pagamento que estão relacionadas para as
                              &#34;Condição de Pagamento&#34; com os &#34;Tipos
                              de Condição de Pagamento&#34; &#34;À vista&#34;,
                              caso não apareça alguma aqui, verifique no
                              cadastro de &#34;Condição de Pagamento&#34; o
                              campo Formas de Pagamento e o campo &#34;Tipos de
                              Condição de Pagamento&#34;
                            </div>
                          ),
                        });
                      }}
                    >
                      <Info />
                    </Button>
                  </div>
                </div>
              }
              options={formasPagamento
                .filter(
                  (forma: any) =>
                    forma?.status_forma != "0" &&
                    condicoesPagamento?.some(
                      (condicao: any) =>
                        condicao.tipo_condicao == "0" &&
                        condicao.cod_formas_pagamento_condicao
                          ?.split(",")
                          ?.includes(String(forma?.id_forma))
                    )
                )
                .map((forma: any) => ({
                  ...forma,
                  value: forma.nome_forma,
                  label: forma.nome_forma,
                }))}
              // options={[
              //   "Boleto",
              //   "Pix",
              //   "Dinheiro",
              //   "Transferência Bancária",
              //   "Cartão de crédito",
              //   "Cartão de débito",
              //   "Criptomoedas",
              // ].map((forma) => ({
              //   value: forma,
              //   label: forma,
              // }))}
              // options={formasPagamento
              //   .filter(
              //     (forma: any) =>
              //       forma?.status_forma != "0" &&
              //       (forma?.cod_lojas_forma == "*" ||
              //         forma?.cod_lojas_forma
              //           ?.split(",")
              //           ?.includes(dadosCard.id_loja_coleta)) &&
              //       (forma?.cod_tipos_negocios == "*" ||
              //         forma?.cod_tipos_negocios
              //           ?.split(",")
              //           ?.includes(dadosCard.tipoNegocio_coleta))
              //   )
              //   .map((forma: any) => ({
              //     ...forma,
              //     value: forma.id_forma,
              //     label: forma.nome_forma,
              //   }))}
              formulario={formPagamento}
              required
              error="Informe a Forma de Pagamento"
              // defaultValue={
              //   proposta?.codForma_pagamento_proposta || formaPagamentoPadrao
              // }
              defaultValue={proposta?.forma_pagamento_entrada_proposta}
              onChange={(e: any) => {
                // setFormaPagamentoSelecionada(e?.value);
                // if (e?.tipo_forma == "0") {
                //   formPagamento?.setValue(
                //     "valor_entrada_proposta",
                //     FormatFields.formatarNumero(+proposta?.valorTotal_proposta),
                //   );
                //   setValor_entrada_proposta(+proposta?.valorTotal_proposta);
                // } else {
                //   formPagamento?.setValue("valor_entrada_proposta", "0,00");
                //   setValor_entrada_proposta(0);
                // }
              }}
              width="min-w-[300px] flex-1"
              dynamic
            />
            {formWatch?.forma_pagamento_entrada_proposta
              ?.exige_instituicao_forma == "1" && (
              <InputSelectComponent
                name="instituicao_entrada_proposta"
                label="Instituição Financeira"
                formulario={formPagamento}
                required
                error="Informe a Instituição Financeira"
                options={instituicoesBancarias.map((instituicao: any) => ({
                  value: instituicao.id_inst_bancaria,
                  label: `${instituicao?.codCompensacao_inst_bancaria ? `${instituicao?.codCompensacao_inst_bancaria} - ` : ""}${instituicao?.nome_inst_bancaria}`,
                  // label: instituicao.nome_inst_bancaria,
                }))}
                defaultValue={proposta?.instituicao_entrada_proposta}
                width="min-w-[300px] flex-1"
                dynamic
              />
            )}
            <Input
              name="valor_entrada_proposta"
              // label={
              //   formWatch?.codCondicao_pagamento_proposta?.tipo_condicao ==
              //   "0" ? (
              //     "Valor Pago"
              //   ) : (
              //     <div className="w-fit flex flex-row gap-1">
              //       <div>{"Valor da Entrada"}</div>
              //     </div>
              //   )
              // }
              label={
                // formWatch?.codCondicao_pagamento_proposta?.tipo_condicao ==
                // "0" ? (
                //   "Valor Pago"
                // ) :
                <div className="w-fit flex flex-row gap-1">
                  <div>{"Valor da Entrada"}</div>
                </div>
              }
              mascara="numero"
              formulario={formPagamento}
              required
              error="Informe o valor"
              onChange={(e) => {
                let valor = e?.target?.value;
                if (
                  valor &&
                  +FormatFields.desformatarNumeros(valor) >
                    +proposta?.valorTotal_proposta
                ) {
                  valor = FormatFields.formatarNumero(
                    +proposta?.valorTotal_proposta
                  );
                  formPagamento?.setValue("valor_entrada_proposta", valor);
                }
                e.target.value = valor;
              }}
              defaultValue={
                (proposta && proposta?.valor_entrada_proposta) || ""
              }
              // disabled={[
              //   formWatch?.codCondicao_pagamento_proposta?.tipo_condicao,
              //   formWatch?.tipo_condicao_proposta?.value,
              // ].includes("0")}
              width="min-w-[300px] flex-1"
            />
            <InputSelectComponent
              name="codCondicao_pagamento_entrada_proposta"
              label="Condição de Pagamento da Entrada"
              options={condicoesPagamento
                .filter(
                  (condicao: any) =>
                    condicao?.status_condicao != "0" &&
                    (condicao?.cod_lojas_condicao == "*" ||
                      condicao?.cod_lojas_condicao
                        ?.split(",")
                        ?.includes(dadosCard.id_loja_coleta)) &&
                    (condicao?.cod_tipos_negocios == "*" ||
                      condicao?.cod_tipos_negocios
                        ?.split(",")
                        ?.includes(dadosCard.tipoNegocio_coleta)) &&
                    (condicao?.cod_formas_pagamento_condicao == "*" ||
                      condicao?.cod_formas_pagamento_condicao
                        ?.split(",")
                        ?.includes(
                          formasPagamento?.find(
                            (forma: any) =>
                              forma.nome_forma ==
                              String(
                                cleanValues.forma_pagamento_entrada_proposta
                              )
                          )?.id_forma
                        )) &&
                    condicao?.tipo_condicao == "0"
                )
                .map((condicao: any) => ({
                  ...condicao,
                  value: condicao.id_condicao,
                  label: `${condicao.id_condicao ? `${condicao.id_condicao} - ` : ""}${condicao.nome_condicao}`,
                }))}
              formulario={formPagamento}
              defaultValue={proposta?.codCondicao_pagamento_entrada_proposta}
              onChange={(e: any) => {
                if (e?.value && e?.value !== "0") {
                  form.setValue(
                    "qtdParcelas_condicao_entrada_proposta",
                    e?.qtdParcelas_condicao
                  );
                  form.setValue(
                    "taxa_juros_condicao_entrada_proposta",
                    e?.taxa_juros_condicao
                  );
                }
              }}
              width=""
            />

            <Input
              name="data_entrada_pagamento_proposta"
              // label={"Prazo da Entrada"}
              label={"Início do Parcelamento"}
              formulario={formPagamento}
              type="date"
              required
              error="Informe a Data"
              onChange={(e) => {
                // setDataPriVcto_pagamento_proposta(e?.target?.value);
                // if (
                //   new Date(getDateBrasil(undefined, undefined, "fr-CA")) >
                //   new Date(e?.target?.value)
                // ) {
                //   handleSweetAlert(
                //     {
                //       icon: "warning",
                //       title: `Prazo Vencido`,
                //       html: `A parcela será gerada como <b>Vencida</b>`,
                //       showDenyButton: false,
                //       confirmButtonText: "Ok",
                //       background: "rgb(200,0,0)",
                //       color: "#fff"
                //     },
                //     () => {}
                //   );
                // }
              }}
              onBlur={(e) => {
                if (
                  new Date(getDateBrasil(undefined, undefined, "fr-CA")) >
                  new Date(e?.target?.value)
                ) {
                  handleSweetAlert(
                    {
                      icon: "warning",
                      title: `Prazo Vencido`,
                      html: `A entrada será gerada como <b>Vencida</b>`,
                      showDenyButton: false,
                      confirmButtonText: "Ok",
                      background: "rgb(200,0,0)",
                      color: "#fff",
                    },
                    () => {}
                  );
                }
              }}
              defaultValue={
                (proposta && proposta?.data_entrada_pagamento_proposta) ||
                getDateBrasil(undefined, undefined, "fr-CA")
              }
              width="min-w-[300px] flex-1"
            />
            {condicaoEntradaSelecionadaAtual && (
              <fieldset className="border-2 border-black-2 p-2 rounded-lg w-full">
                <legend className="text-sm font-semibold text-gray-600 px-2">
                  Parcelas da Entrada
                </legend>
                <div className="flex flex-row gap-3 flex-wrap">
                  <Input
                    name="qtdParcelas_condicao_entrada_proposta"
                    label={
                      <div className="flex flex-row items-center gap-1">
                        <div>Qtd Parcelas</div>
                        {condicaoEntradaSelecionadaAtual?.qtdParcelas_condicao && (
                          <span className="text-xs text-gray-400">
                            (máx{" "}
                            {
                              condicaoEntradaSelecionadaAtual.qtdParcelas_condicao
                            }
                            )
                          </span>
                        )}
                      </div>
                    }
                    formulario={form}
                    mascara="numerico"
                    required
                    error="Informe a Quantidade"
                    defaultValue={
                      proposta &&
                      proposta["qtdParcelas_condicao_entrada_proposta"]
                    }
                    width="flex-1"
                    schema={yup
                      .number()
                      .required("Informe a quantidade")
                      .transform(
                        (val) => +FormatFields.desformatarNumeros(val || 0)
                      )
                      .test(
                        "max-qtdParcelas-condicao-entrada",
                        "Valor acima do máximo da condição",
                        function (value) {
                          const condicaoSelecionada = formPagamento.getValues(
                            "codCondicao_pagamento_entrada_proposta"
                          );
                          const maximo =
                            Number(condicaoSelecionada?.qtdParcelas_condicao) ||
                            0;
                          if (!maximo || (value || 0) <= maximo) return true;
                          return this.createError({
                            message: `Valor Máximo: ${maximo}`,
                          });
                        }
                      )}
                    dynamic
                  />
                  <Input
                    name="taxa_juros_condicao_entrada_proposta"
                    label="Taxa de Juros (mensal)"
                    formulario={form}
                    suffix={"%"}
                    mascara="numero"
                    maxLength={6}
                    schema={yup
                      .number()
                      .required("Informe a taxa de juros")
                      .transform(
                        (val) => +FormatFields.desformatarNumeros(val || 0)
                      )
                      .max(100, "Porcentagem Máxima: 100")}
                    required
                    onChange={(e) => {
                      if (
                        e?.target?.value &&
                        +FormatFields.desformatarNumeros(
                          e?.target?.value || 0
                        ) > 100
                      ) {
                        form?.setValue(
                          "taxa_juros_condicao_entrada_proposta",
                          "100,00"
                        );
                      }
                    }}
                    width="flex-1"
                    defaultValue={
                      proposta &&
                      proposta["taxa_juros_condicao_entrada_proposta"]
                    }
                    error={"Informe a taxa de juros"}
                    dynamic
                  />
                  {/* <InputSelectComponent
                    name="diaVcto_entrada_proposta"
                    label="Dia do Vencimento"
                    options={options_days.filter(
                      (option) =>
                        option.value != "*" &&
                        (condicaoEntradaSelecionadaAtual?.dias_disponiveis_condicao ==
                        "*"
                          ? true
                          : condicaoEntradaSelecionadaAtual?.dias_disponiveis_condicao
                              ?.split(",")
                              ?.includes(option.value))
                    )}
                    // width="min-w-[400px] flex-1"
                    width="flex-1"
                    dynamic
                    onChange={(e: any) => {
                      // Campo solto: só distribui a mesma data em todas as
                      // parcelas da entrada, não é um valor real do formulário.
                      const dia = Number(e?.value);
                      const dataInicio =
                        cleanValues.data_entrada_pagamento_proposta;
                      const qtdParcelas =
                        Number(
                          formWatch?.qtdParcelas_condicao_entrada_proposta
                        ) || 0;

                      if (!dia || !dataInicio || !qtdParcelas) return;

                      for (let indice = 0; indice < qtdParcelas; indice++) {
                        handleChangeParcelaEntrada(indice, {
                          data_parcela_proposta: getDataParcelaComDiaFixo(
                            dataInicio,
                            indice + 1,
                            dia
                          ),
                        });
                      }
                    }}
                  /> */}
                </div>
              </fieldset>
            )}
            {(() => {
              const condicao = condicaoEntradaSelecionadaAtual?.value;
              if (!condicao) return null;

              const diasDisponiveisCondicaoRaw =
                condicaoEntradaSelecionadaAtual?.dias_disponiveis_condicao;
              const diasDisponiveisCondicao =
                diasDisponiveisCondicaoRaw && diasDisponiveisCondicaoRaw !== "*"
                  ? diasDisponiveisCondicaoRaw
                      .split(",")
                      .map((dia: string) => Number(dia))
                  : undefined;

              const parcelasBatem =
                saldoDevedorCalculadoEntrada === undefined ||
                Math.abs(saldoDevedorCalculadoEntrada) <= 0.01;

              return (
                <>
                  {saldoDevedorCalculadoEntrada !== undefined && (
                    <div
                      className={`w-full rounded-lg text-center text-lg p-2 ${
                        parcelasBatem
                          ? "bg-secondaryMenu bg-opacity-30 text-black-2"
                          : "bg-red-100 text-red-700"
                      }`}
                    >
                      {parcelasBatem ? (
                        <div>Parcelas da entrada quitam o valor com juros</div>
                      ) : (
                        <div className="text-sm">
                          {saldoDevedorCalculadoEntrada > 0
                            ? `Ainda falta pagar ${formatarValor(
                                saldoDevedorCalculadoEntrada
                              )} da entrada considerando os juros até a última parcela`
                            : `As parcelas da entrada pagam ${formatarValor(
                                Math.abs(saldoDevedorCalculadoEntrada)
                              )} a mais que o valor da entrada com juros`}
                        </div>
                      )}
                    </div>
                  )}
                  <div className="flex flex-row gap-2 flex-wrap w-full">
                    <Button
                      type="button"
                      className="bg-primary"
                      onClick={preencherParcelasIguaisEntrada}
                    >
                      Preencher parcelas iguais
                    </Button>
                    <Button
                      type="button"
                      className="bg-primary"
                      onClick={preencherUltimaParcelaEntrada}
                    >
                      Preencher última parcela p/ fechar dívida
                    </Button>
                  </div>
                  {parcelasPersonalizadasEntrada.map((parcela, numParcela) => (
                    <InputParcelaPersonalizada
                      key={numParcela}
                      numParcela={numParcela}
                      parcela={parcela}
                      condicao={condicao}
                      dataBase={cleanValues.data_entrada_pagamento_proposta}
                      dataParcelaAnterior={
                        numParcela === 0
                          ? cleanValues.data_entrada_pagamento_proposta
                          : parcelasPersonalizadasEntrada[numParcela - 1]
                              ?.data_parcela_proposta
                      }
                      diasDisponiveisCondicao={diasDisponiveisCondicao}
                      avisarIntervaloDias
                      onChange={handleChangeParcelaEntrada}
                      setHandleSubmits={setHandleSubmitsEntrada}
                    />
                  ))}
                </>
              );
            })()}
            <Input
              name="observacao_entrada_pagamento_proposta"
              label="Observações da Entrada"
              formulario={formPagamento}
              type="textarea"
              defaultValue={proposta?.observacao_entrada_pagamento_proposta}
            />
          </fieldset>
        )}
        <fieldset className="border-2 border-black-2 p-2 rounded-lg w-full flex flex-row flex-wrap gap-4">
          <legend className="text-sm font-semibold text-gray-600 px-2">
            Saldo Devedor
          </legend>
          <InputSelectComponent
            name="forma_pagamento_proposta"
            label="Forma de Pagamento do Saldo"
            options={formasPagamento
              .filter((forma: any) => forma?.status_forma != "0")
              .map((forma: any) => ({
                ...forma,
                value: forma.nome_forma,
                label: forma.nome_forma,
              }))}
            // options={[
            //   "Boleto",
            //   "Pix",
            //   "Dinheiro",
            //   "Transferência Bancária",
            //   "Cartão de crédito",
            //   "Cartão de débito",
            //   "Criptomoedas",
            // ].map((forma) => ({
            //   value: forma,
            //   label: forma,
            // }))}
            // options={formasPagamento
            //   .filter(
            //     (forma: any) =>
            //       forma?.status_forma != "0" &&
            //       (forma?.cod_lojas_forma == "*" ||
            //         forma?.cod_lojas_forma
            //           ?.split(",")
            //           ?.includes(dadosCard.id_loja_coleta)) &&
            //       (forma?.cod_tipos_negocios == "*" ||
            //         forma?.cod_tipos_negocios
            //           ?.split(",")
            //           ?.includes(dadosCard.tipoNegocio_coleta))
            //   )
            //   .map((forma: any) => ({
            //     ...forma,
            //     value: forma.id_forma,
            //     label: forma.nome_forma,
            //   }))}
            formulario={formPagamento}
            required
            error="Informe a Forma de Pagamento"
            // defaultValue={
            //   proposta?.codForma_pagamento_proposta || formaPagamentoPadrao
            // }
            defaultValue={proposta?.forma_pagamento_proposta}
            onChange={(e: any) => {
              // setFormaPagamentoSelecionada(e?.value);
              // if (e?.tipo_forma == "0") {
              //   formPagamento?.setValue(
              //     "valor_entrada_proposta",
              //     FormatFields.formatarNumero(+proposta?.valorTotal_proposta),
              //   );
              //   setValor_entrada_proposta(+proposta?.valorTotal_proposta);
              // } else {
              //   formPagamento?.setValue("valor_entrada_proposta", "0,00");
              //   setValor_entrada_proposta(0);
              // }
            }}
            width=""
          />
          {formWatch?.forma_pagamento_proposta?.exige_instituicao_forma ==
            "1" && (
            <InputSelectComponent
              name="instituicao_saldo_proposta"
              // label="Instituição Financeira do Saldo"
              label={"Instituição Financeira"}
              formulario={formPagamento}
              required
              error="Informe a Instituição Financeira"
              options={instituicoesBancarias.map((instituicao: any) => ({
                value: instituicao.id_inst_bancaria,
                label: `${instituicao?.codCompensacao_inst_bancaria ? `${instituicao?.codCompensacao_inst_bancaria} - ` : ""}${instituicao?.nome_inst_bancaria}`,
                // label: instituicao.nome_inst_bancaria,
              }))}
              defaultValue={proposta?.instituicao_saldo_proposta}
              width="min-w-[300px] flex-1"
              dynamic
            />
          )}

          {/* <Input
          name="dataPriVcto_pagamento_proposta"
          label={
            formWatch?.codCondicao_pagamento_proposta?.tipo_condicao == "0"
              ? "Data do Vencimento"
              : "Prazo da Entrada/Início do Parcelamento"
          }
          formulario={formPagamento}
          type="date"
          required
          error="Informe a Data"
          // onChange={(e) => {
          //   setDataPriVcto_pagamento_proposta(e?.target?.value);
          //   // if (
          //   //   new Date(getDateBrasil(undefined, undefined, "fr-CA")) >
          //   //   new Date(e?.target?.value)
          //   // ) {
          //   //   handleSweetAlert(
          //   //     {
          //   //       icon: "warning",
          //   //       title: `Prazo Vencido`,
          //   //       html: `A parcela será gerada como <b>Vencida</b>`,
          //   //       showDenyButton: false,
          //   //       confirmButtonText: "Ok",
          //   //       background: "rgb(200,0,0)",
          //   //       color: "#fff"
          //   //     },
          //   //     () => {}
          //   //   );
          //   // }
          // }}
          onBlur={(e) => {
            if (
              new Date(getDateBrasil(undefined, undefined, "fr-CA")) >
              new Date(e?.target?.value)
            ) {
              handleSweetAlert(
                {
                  icon: "warning",
                  title: `Prazo Vencido`,
                  html: `A parcela será gerada como <b>Vencida</b>`,
                  showDenyButton: false,
                  confirmButtonText: "Ok",
                  background: "rgb(200,0,0)",
                  color: "#fff",
                },
                () => {}
              );
            }
            setDataPriVcto_pagamento_proposta(e?.target?.value);
          }}
          defaultValue={
            (proposta && proposta?.dataPriVcto_pagamento_proposta) ||
            getDateBrasil(undefined, undefined, "fr-CA")
          }
          width="min-w-[400px] flex-1"
        /> */}
          <InputSelectComponent
            name="codCondicao_pagamento_proposta"
            label="Condição de Pagamento"
            options={[
              // { value: "0", label: "Personalizada" },
              ...condicoesPagamento
                .filter(
                  (condicao: any) =>
                    condicao?.status_condicao != "0" &&
                    (condicao?.cod_lojas_condicao == "*" ||
                      condicao?.cod_lojas_condicao
                        ?.split(",")
                        ?.includes(dadosCard.id_loja_coleta)) &&
                    (condicao?.cod_tipos_negocios == "*" ||
                      condicao?.cod_tipos_negocios
                        ?.split(",")
                        ?.includes(dadosCard.tipoNegocio_coleta)) &&
                    (condicao?.cod_formas_pagamento_condicao == "*" ||
                      condicao?.cod_formas_pagamento_condicao
                        ?.split(",")
                        ?.includes(
                          formasPagamento?.find(
                            (forma: any) =>
                              forma.nome_forma ==
                              String(cleanValues.forma_pagamento_proposta)
                          )?.id_forma
                        ))
                )
                .map((condicao: any) => ({
                  ...condicao,
                  value: condicao.id_condicao,
                  // label: condicao.nome_condicao,
                  label: `${condicao.id_condicao ? `${condicao.id_condicao} - ` : ""}${condicao.nome_condicao}`,
                })),
            ]}
            formulario={formPagamento}
            required
            error="Informe a Condição de Pagamento"
            defaultValue={
              proposta?.codCondicao_pagamento_proposta
              // || condicaoPagamentoPadrao
            }
            onChange={(e: any) => {
              // setFormaPagamentoSelecionada(e?.value);
              // if (e?.tipo_forma == "0") {
              //   formPagamento?.setValue(
              //     "valor_entrada_proposta",
              //     FormatFields.formatarNumero(+proposta?.valorTotal_proposta),
              //   );
              //   setValor_entrada_proposta(+proposta?.valorTotal_proposta);
              // } else {
              //   formPagamento?.setValue("valor_entrada_proposta", "0,00");
              //   setValor_entrada_proposta(0);
              // }
              if (e?.value && e?.value !== "0") {
                // form.setValue(
                //   "tipo_condicao_proposta",
                //   tiposCondicoes?.find(
                //     (tipo) =>
                //       tipo.value ==
                //       formWatch.codCondicao_pagamento_proposta?.tipo_condicao
                //   )
                // );
                form.setValue(
                  "qtdParcelas_condicao_proposta",
                  e?.qtdParcelas_condicao
                );
                form.setValue(
                  "taxa_juros_condicao_proposta",
                  e?.taxa_juros_condicao
                );
                // form.setValue(
                //   "periodicidade_condicao_proposta",
                //   [
                //     {
                //       value: "DAY",
                //       label: "Diário",
                //     },
                //     {
                //       value: "WEEK",
                //       label: "Semanal",
                //     },
                //     {
                //       value: "MONTH",
                //       label: "Mensal",
                //     },
                //     {
                //       value: "YEAR",
                //       label: "Anual",
                //     },
                //   ].find(
                //     (option) =>
                //       option.value ==
                //       formWatch.codCondicao_pagamento_proposta?.periodicidade_condicao
                //   )
                // );
              }
            }}
            width=""
          />
          <Input
            name="data_inicio_parcelamento_pagamento_proposta"
            // name="dataPriVcto_pagamento_proposta"
            label={
              // cleanValues.posui_entrada_proposta == "1"
              //   ? "Prazo da Entrada/Início do Parcelamento"
              //   : // ? "Data do Vencimento"
              "Início do Parcelamento"
            }
            formulario={formPagamento}
            type="date"
            required
            error="Informe a Data"
            // onChange={(e) => {
            //   setDataPriVcto_pagamento_proposta(e?.target?.value);
            //   // if (
            //   //   new Date(getDateBrasil(undefined, undefined, "fr-CA")) >
            //   //   new Date(e?.target?.value)
            //   // ) {
            //   //   handleSweetAlert(
            //   //     {
            //   //       icon: "warning",
            //   //       title: `Prazo Vencido`,
            //   //       html: `A parcela será gerada como <b>Vencida</b>`,
            //   //       showDenyButton: false,
            //   //       confirmButtonText: "Ok",
            //   //       background: "rgb(200,0,0)",
            //   //       color: "#fff"
            //   //     },
            //   //     () => {}
            //   //   );
            //   // }
            // }}
            onBlur={(e) => {
              if (
                new Date(getDateBrasil(undefined, undefined, "fr-CA")) >
                new Date(e?.target?.value)
              ) {
                handleSweetAlert(
                  {
                    icon: "warning",
                    title: `Prazo Vencido`,
                    html: `A parcela será gerada como <b>Vencida</b>`,
                    showDenyButton: false,
                    confirmButtonText: "Ok",
                    background: "rgb(200,0,0)",
                    color: "#fff",
                  },
                  () => {}
                );
              }
              setDataPriVcto_pagamento_proposta?.(e?.target?.value);
            }}
            defaultValue={
              (proposta &&
                proposta?.data_inicio_parcelamento_pagamento_proposta) ||
              getDateBrasil(undefined, undefined, "fr-CA")
            }
            width="min-w-[400px] flex-1"
          />
          <fieldset className="border-2 border-black-2 p-2 rounded-lg w-full">
            <legend className="text-sm font-semibold text-gray-600 px-2">
              Condição
            </legend>
            <div className="flex flex-row gap-3 flex-wrap">
              {/* <InputSelectComponent
              name="tipo_condicao_proposta"
              label="Tipos de Condição de Pagamento"
              formulario={form}
              options={tiposCondicoes}
              formatOptionLabel={(tipo) => (
                <div className="flex flex-row gap-2">
                  {tipo.label}
                  {tipo.value == "2" && (
                    <Button
                      type="button"
                      className={` bg-primary flex flex-row gap-2 rounded-full p-0`}
                      onClick={(e: any) => {
                        e.stopPropagation();
                        handleSweetAlert({
                          icon: "info",
                          // title: "Cálculo Markup",
                          showDenyButton: false,
                          confirmButtonText: "Ok",
                          html: (
                            <div className="flex flex-col gap-2">
                              Atenção!! Com esta opção, é possível criar
                              condições de pagamento com a quantidade dias para
                              o VENCIMENTO que desejar, sendo que o vencimento
                              poderá cair em dias diferentes do mês.
                            </div>
                          ),
                        });
                      }}
                    >
                      <Info />
                    </Button>
                  )}
                </div>
              )}
              error={"Selecione um Tipo"}
              required
              defaultValue={proposta && proposta["tipo_condicao_proposta"]}
              // onChange={(e: any) => {
              //   setTipoDeFormaSelecionada(e?.value);
              //   if (e?.value == "0") {
              //     form.control.unregister(
              //       [
              //         "qtdParcelas_condicao",
              //         "prazos_condicao",
              //         "taxa_juros_condicao_proposta",
              //       ] as never[],
              //       {
              //         keepError: false,
              //         keepValue: false,
              //       }
              //     );
              //     form.reload();
              //   }
              // }}
              skipEffect
              width="flex-1"
              disabled={formWatch?.codCondicao_pagamento_proposta?.value != "0"}
            /> */}

              <Input
                name="qtdParcelas_condicao_proposta"
                label={
                  <div className="flex flex-row items-center gap-1">
                    <div>Qtd Parcelas</div>
                    {condicaoSelecionadaAtual?.qtdParcelas_condicao && (
                      <span className="text-xs text-gray-400">
                        (máx {condicaoSelecionadaAtual.qtdParcelas_condicao})
                      </span>
                    )}
                  </div>
                }
                formulario={form}
                mascara="numerico"
                required
                error="Informe a Quantidade"
                defaultValue={
                  proposta && proposta["qtdParcelas_condicao_proposta"]
                }
                width="flex-1"
                // disabled={
                //   formWatch?.codCondicao_pagamento_proposta?.value != "0"
                // }
                schema={yup
                  .number()
                  .required("Informe a quantidade")
                  .transform(
                    (val) => +FormatFields.desformatarNumeros(val || 0)
                  )
                  .test(
                    "max-qtdParcelas-condicao",
                    "Valor acima do máximo da condição",
                    function (value) {
                      // Input só registra o schema na montagem, então ler
                      // formWatch aqui ficaria preso no valor da 1ª renderização.
                      // formPagamento.getValues busca o valor atual na hora da
                      // validação (control é estável, independe de quando o
                      // schema foi montado).
                      const condicaoSelecionada = formPagamento.getValues(
                        "codCondicao_pagamento_proposta"
                      );
                      const maximo =
                        Number(condicaoSelecionada?.qtdParcelas_condicao) || 0;
                      if (!maximo || (value || 0) <= maximo) return true;
                      return this.createError({
                        message: `Valor Máximo: ${maximo}`,
                      });
                    }
                  )}
                dynamic
              />
              <Input
                name="taxa_juros_condicao_proposta"
                label={
                  <div className="w-fit flex flex-row gap-1">
                    <div>{"Taxa de Juros (mensal)"}</div>
                    <div className="px-1">
                      <Button
                        type="button"
                        className={` bg-primary flex flex-row gap-2 rounded-full p-0`}
                        onClick={(e: any) => {
                          e.stopPropagation();
                          handleSweetAlert({
                            icon: "info",
                            title: "Cálculo dos Juros usando a Fórmula PRICE",
                            showDenyButton: false,
                            confirmButtonText: "Ok",
                            html: (
                              <div className="flex flex-col gap-2">
                                <div>
                                  <div className="font-semibold">
                                    Fórmula que obtêm qual o valor da parcela.
                                  </div>
                                  <div
                                    className="italic font-bold flex flex-col gap-2 items-center py-2 text-xl"
                                    dangerouslySetInnerHTML={{
                                      __html: katex.renderToString(
                                        "P = PV \\cdot \\frac{i}{1 - (1+i)^{-n}}",
                                        {
                                          throwOnError: false,
                                        }
                                      ),
                                    }}
                                  ></div>
                                  <div className="italic flex flex-col items-start pb-2">
                                    <div>P = Valor da Parcela</div>
                                    <div>
                                      PV = Total da dívida (Valor Principal)
                                    </div>
                                    <div>
                                      i = Taxa de juros no período (meses)
                                    </div>
                                    <div>n = Número de parcelas</div>
                                  </div>
                                  <fieldset className="flex flex-col border-black/25 border rounded p-2 px-3 w-full">
                                    <div>Links Úteis</div>
                                    <a
                                      href="https://www3.bcb.gov.br/CALCIDADAO/publico/exibirFormFinanciamentoPrestacoesFixas.do?method=exibirFormFinanciamentoPrestacoesFixas"
                                      target="_blank"
                                      style={{
                                        color: "revert",
                                        textDecoration: "revert",
                                      }}
                                    >
                                      Calculadora do Banco Central do Brasil
                                    </a>
                                    <a
                                      href="https://www.calcule.net/financeiro/juros-financiamento-calculadora/"
                                      target="_blank"
                                      style={{
                                        color: "revert",
                                        textDecoration: "revert",
                                      }}
                                    >
                                      Calculadora de Juros
                                    </a>
                                    <a
                                      href="https://investnews.com.br/ferramentas/calculadoras/calculadora-price/"
                                      target="_blank"
                                      style={{
                                        color: "revert",
                                        textDecoration: "revert",
                                      }}
                                    >
                                      Calculadora da Tabela Price
                                    </a>
                                  </fieldset>
                                </div>
                              </div>
                            ),
                          });
                        }}
                      >
                        <Info />
                      </Button>
                    </div>
                  </div>
                }
                formulario={form}
                suffix={"%"}
                mascara="numero"
                maxLength={6}
                // prefix={"%"}
                schema={yup
                  .number()
                  .required("Informe a taxa de juros")
                  .transform(
                    (val) => +FormatFields.desformatarNumeros(val || 0)
                  )
                  .max(100, "Porcentagem Máxima: 100")}
                required
                onChange={(e) => {
                  if (
                    e?.target?.value &&
                    +FormatFields.desformatarNumeros(e?.target?.value || 0) >
                      100
                  ) {
                    form?.setValue("taxa_juros_condicao_proposta", "100,00");
                  }
                }}
                width="flex-1"
                defaultValue={
                  proposta && proposta["taxa_juros_condicao_proposta"]
                }
                error={"Informe a taxa de juros"}
                // disabled={formWatch?.codCondicao_pagamento_proposta?.value != "0"}
                dynamic
              />
              <InputSelectComponent
                name="diaVcto_pagamento_proposta"
                label={
                  <div className="w-fit flex flex-row gap-1">
                    <div>{"Dia do Vencimento"}</div>
                    <div className="px-1">
                      <Button
                        type="button"
                        className={` bg-primary flex flex-row gap-2 rounded-full p-0`}
                        onClick={(e: any) => {
                          e.stopPropagation();
                          handleSweetAlert({
                            icon: "info",
                            title: "Dia do Vencimento",
                            showDenyButton: false,
                            confirmButtonText: "Ok",
                            html: (
                              <div className="flex flex-col gap-2">
                                Atalho pra preencher rápido: escolha um dia do
                                mês aqui e todas as parcelas abaixo recebem
                                automaticamente essa data, um mês após o outro a
                                partir do início do parcelamento. Esse campo não
                                é salvo, ele só distribui as datas — pode
                                ajustar cada parcela manualmente depois.
                              </div>
                            ),
                          });
                        }}
                      >
                        <Info />
                      </Button>
                    </div>
                  </div>
                }
                // formulario={formPagamento}
                options={
                  options_days.filter(
                    (option) =>
                      option.value != "*" &&
                      (formWatch?.codCondicao_pagamento_proposta
                        ?.dias_disponiveis_condicao == "*"
                        ? true
                        : formWatch?.codCondicao_pagamento_proposta?.dias_disponiveis_condicao
                            ?.split(",")
                            ?.includes(option.value))
                  )
                  // formWatch?.codCondicao_pagamento_proposta?.dias_disponiveis_condicao
                  //   ?.split(",")
                  //   .map((dia: string) => ({ label: dia, value: dia })) || []
                }
                // width="min-w-[400px] flex-1"
                width="flex-1"
                defaultValue={proposta && proposta?.diaVcto_pagamento_proposta}
                // required
                dynamic
                onChange={(e: any) => {
                  // Campo solto (sem formulario={formPagamento} de propósito): só
                  // serve de atalho pra distribuir o mesmo dia do mês em todas as
                  // parcelas, não é um valor real do formulário de pagamento.
                  const dia = Number(e?.value);
                  const dataInicio =
                    cleanValues.data_inicio_parcelamento_pagamento_proposta;
                  const qtdParcelas =
                    Number(formWatch?.qtdParcelas_condicao_proposta) || 0;

                  if (!dia || !dataInicio || !qtdParcelas) return;

                  for (let indice = 0; indice < qtdParcelas; indice++) {
                    handleChangeParcela(indice, {
                      data_parcela_proposta: getDataParcelaComDiaFixo(
                        dataInicio,
                        indice + 1,
                        dia
                      ),
                    });
                  }
                }}
              />
            </div>
          </fieldset>

          {/* {[
          formWatch?.codCondicao_pagamento_proposta?.tipo_condicao,
          formWatch?.tipo_condicao_proposta?.value,
        ].includes("1") &&
          [
            formWatch?.codCondicao_pagamento_proposta?.periodicidade_condicao,
            formWatch?.periodicidade_condicao_proposta?.value,
          ].includes("MONTH") && (
            <div>
              {formWatch?.codCondicao_pagamento_proposta
                ?.periodicidade_condicao == "MONTH" ? (
                <InputSelectComponent
                  name="diaVcto_pagamento_proposta"
                  label="Dia do Vencimento"
                  formulario={formPagamento}
                  options={
                    formWatch?.codCondicao_pagamento_proposta?.dias_disponiveis_condicao
                      ?.split(",")
                      .map((dia: string) => ({ label: dia, value: dia })) || []
                  }
                  width="min-w-[400px] flex-1"
                  defaultValue={
                    proposta && proposta?.diaVcto_pagamento_proposta
                  }
                  // required
                  dynamic
                />
              ) : (
                <Input
                  name="diaVcto_pagamento_proposta"
                  label="Dia do Vencimento"
                  formulario={formPagamento}
                  mascara="numerico"
                  defaultValue={
                    proposta && proposta?.diaVcto_pagamento_proposta
                  }
                  width="min-w-[400px] flex-1"
                  schema={yup
                    .number()
                    .required("Informe o dia do vencimento")
                    .transform(
                      (val) => +FormatFields.desformatarNumeros(val || 0)
                    )
                    .min(1, "Dia Mínimo: 1")
                    .max(28, "Dia Máximo: 28")}
                  required
                  dynamic
                />
              )}
            </div>
          )} */}
          {(() => {
            // const tipoCondicao = [
            //   formWatch?.codCondicao_pagamento_proposta?.tipo_condicao,
            //   formWatch?.tipo_condicao_proposta?.value,
            // ].find((tipo) => ["2", "3"].includes(tipo));

            // if (!tipoCondicao) return null;
            const condicao = formWatch?.codCondicao_pagamento_proposta?.value;
            if (!condicao) return null;

            // const diasDisponiveisCondicao =
            //   formWatch?.codCondicao_pagamento_proposta?.tipo_condicao == "2"
            //     ? formWatch?.codCondicao_pagamento_proposta?.dias_disponiveis_condicao
            //         ?.split(",")
            //         ?.map((dia: string) => Number(dia))
            //     : undefined;
            const diasDisponiveisCondicaoRaw =
              formWatch?.codCondicao_pagamento_proposta
                ?.dias_disponiveis_condicao;
            // "*" = todos os dias liberados, então não passa lista nenhuma pro
            // teste "dia-liberado" (ele já trata ausência de lista como liberado).
            const diasDisponiveisCondicao =
              diasDisponiveisCondicaoRaw && diasDisponiveisCondicaoRaw !== "*"
                ? diasDisponiveisCondicaoRaw
                    .split(",")
                    .map((dia: string) => Number(dia))
                : undefined;

            const parcelasBatem =
              saldoDevedorCalculado === undefined ||
              Math.abs(saldoDevedorCalculado) <= 0.01;

            return (
              <>
                {saldoDevedorCalculado !== undefined && (
                  <div
                    className={`w-full rounded-lg text-center text-lg p-2 ${
                      parcelasBatem
                        ? "bg-secondaryMenu bg-opacity-30 text-black-2"
                        : "bg-red-100 text-red-700"
                    }`}
                  >
                    {parcelasBatem ? (
                      <div>Parcelas quitam o saldo devedor com juros</div>
                    ) : (
                      <div className="text-sm">
                        {saldoDevedorCalculado > 0
                          ? `Ainda falta pagar ${formatarValor(
                              saldoDevedorCalculado
                            )} considerando os juros até a última parcela`
                          : `As parcelas pagam ${formatarValor(
                              Math.abs(saldoDevedorCalculado)
                            )} a mais que o saldo devedor com juros`}
                      </div>
                    )}
                  </div>
                )}
                <div className="flex flex-row gap-2 flex-wrap w-full">
                  <Button
                    type="button"
                    className="bg-primary"
                    onClick={preencherParcelasIguais}
                  >
                    Preencher parcelas iguais
                  </Button>
                  <Button
                    type="button"
                    className="bg-primary"
                    onClick={preencherUltimaParcela}
                  >
                    Preencher última parcela p/ fechar dívida
                  </Button>
                </div>
                {parcelasPersonalizadas.map((parcela, numParcela) => (
                  <InputParcelaPersonalizada
                    key={numParcela}
                    numParcela={numParcela}
                    parcela={parcela}
                    // tipoCondicao={tipoCondicao}
                    condicao={condicao}
                    dataBase={
                      cleanValues.data_inicio_parcelamento_pagamento_proposta
                    }
                    dataParcelaAnterior={
                      numParcela === 0
                        ? cleanValues.data_inicio_parcelamento_pagamento_proposta
                        : parcelasPersonalizadas[numParcela - 1]
                            ?.data_parcela_proposta
                    }
                    diasDisponiveisCondicao={diasDisponiveisCondicao}
                    onChange={handleChangeParcela}
                    setHandleSubmits={setHandleSubmitsSaldo}
                  />
                ))}
              </>
            );
          })()}
        </fieldset>
      </div>
      <Input
        name="observacao_pagamento_proposta"
        label="Observações do pagamento"
        formulario={formPagamento}
        type="textarea"
        defaultValue={
          proposta?.observacao_pagamento_proposta ?? condicaoPagamentoCustom
        }
      />
      {/* <Input
          formulario={formPagamento}
          label="Condição de Pagamento"
          name="condicao_pagamento_proposta"
          error="Preencha a Condição de Pagamento"
          type="textarea"
          // rows={10}
          defaultValue={
            proposta?.condicao_pagamento_proposta ||
            condicaoPagamentoCustom ||
            ""
          }
          maxLength={1050}
          required
        /> */}
      <Input
        formulario={formPagamento}
        label="Informações Pagamento"
        name="informacoes_pagamento_proposta"
        type="textarea"
        // rows={10}
        defaultValue={proposta?.informacoes_pagamento_proposta || ""}
        maxLength={1050}
      />
    </div>
  );
}
