// components/RelatorioParcelas.tsx
import Button from "@/components/Forms/Button";
import jsPDF from "jspdf";
import autoTable from "jspdf-autotable";
import { Download } from "lucide-react";

export default function RelatorioParcelas({ parcelas }: { parcelas: any[] }) {
  const gerarPDF = () => {
    const doc = new jsPDF();

    // Título
    doc.setFontSize(16);
    doc.text("Relatório de Parcelas", 14, 15);

    // Tabela de parcelas
    autoTable(doc, {
      startY: 20,
      head: [
        [
          "ID",
          "Status",
          "Negócio",
          "Tipo",
          "Parcela",
          "Vencimento",
          "Valor",
          "Pagamento",
        ],
      ],
      body: parcelas.map((p) => [
        p.id_parcelamento,
        p.status_parcelamento,
        p.codNegocio_parcelamento,
        p.codTipoNegocio_parcelamento,
        p.parcela_parcelamento,
        p.dataVencimento_parcelamento,
        p.valorParcela_parcelamento,
        p.dataPagamento_parcelamento || "-",
      ]),
      styles: { fontSize: 8, cellPadding: 2 },
      headStyles: { fillColor: [41, 128, 185] },
    });

    // Cálculos
    const totalGeral = parcelas.reduce(
      (sum, p) =>
        sum +
        parseFloat(
          p.valorParcela_parcelamento.replace(/[R$\s.]/g, "").replace(",", ".")
        ),
      0
    );
    const totalPago = parcelas
      .filter((p) => p.dataPagamento_parcelamento)
      .reduce(
        (sum, p) =>
          sum +
          parseFloat(
            p.valorParcela_parcelamento
              .replace(/[R$\s.]/g, "")
              .replace(",", ".")
          ),
        0
      );
    const totalAberto = totalGeral - totalPago;
    const qtdPagas = parcelas.filter(
      (p) => p.dataPagamento_parcelamento
    ).length;
    const qtdAbertas = parcelas.length - qtdPagas;
    const valorMedio = totalGeral / parcelas.length;

    // Resumo
    let finalY = (doc as any).lastAutoTable.finalY + 10;
    doc.setFontSize(12);
    doc.text("Resumo", 14, finalY);
    finalY += 6;
    doc.setFontSize(10);
    doc.text(
      `Total Geral: R$ ${totalGeral.toLocaleString("pt-BR", { minimumFractionDigits: 2 })}`,
      14,
      finalY
    );
    finalY += 5;
    doc.text(
      `Total Pago: R$ ${totalPago.toLocaleString("pt-BR", { minimumFractionDigits: 2 })}`,
      14,
      finalY
    );
    finalY += 5;
    doc.text(
      `Total em Aberto: R$ ${totalAberto.toLocaleString("pt-BR", { minimumFractionDigits: 2 })}`,
      14,
      finalY
    );
    finalY += 5;
    doc.text(`Parcelas Pagas: ${qtdPagas}`, 14, finalY);
    finalY += 5;
    doc.text(`Parcelas em Aberto: ${qtdAbertas}`, 14, finalY);
    finalY += 5;
    doc.text(
      `Valor Médio por Parcela: R$ ${valorMedio.toLocaleString("pt-BR", { minimumFractionDigits: 2 })}`,
      14,
      finalY
    );

    // Salvar
    doc.save("relatorio_parcelas.pdf");
  };

  return (
    <Button
      onClick={gerarPDF}
      className={"p-2 flex flex-row gap-2 flex-nowrap text-white bg-primary hover:bg-primary/80"}
      variant="secondary"
    >
      <Download />
      <div>Gerar Relatório PDF</div>
    </Button>
  );
}
