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

export default function RelatorioOS({
  dados,
  columns,
}: {
  dados: any[];
  columns: any[];
}) {
  const gerarPDF = () => {
    const doc = new jsPDF({
      orientation: "landscape",
      unit: "mm",
      format: "a4",
    });

    doc.setFontSize(16);
    doc.text("Relatório de Ordens de Serviço (OS)", 10, 15);

    // =====================================
    // HEADERS E LINHAS GERADOS DINAMICAMENTE
    // =====================================
    const colunas = columns.map((c) => c.header);

    const linhas = dados.map((row) =>
      columns.map((c) => {
        const value = row[c.accessorKey];

        // Converte valores não string
        if (value === null || value === undefined) return "";
        if (typeof value === "number") return String(value);

        return String(value);
      })
    );

    autoTable(doc, {
      startY: 22,
      head: [colunas],
      body: linhas,
      styles: {
        fontSize: 5, // 👈 menor fonte
        cellPadding: 0.5, // 👈 células mais estreitas
        overflow: "linebreak", // 👈 quebra de linha dentro da célula
        minCellWidth: 10, // 👈 largura mínima
      },
      headStyles: { fillColor: [32, 100, 180], fontSize: 6 },
      tableWidth: "auto",

      columnStyles: {
        // 👇 força redimensionamento automático
        0: { cellWidth: "auto" },
      },
      margin: { left: 5 },
      // horizontalPageBreak: true,
      // compress: true,
    });

    // === RESUMO GERAL ===
    function parseValor(valor: any) {
      if (!valor) return 0;
      return Number(valor.replace(/[R$\s.]/g, "").replace(",", "."));
    }

    const totalOS = dados.length;

    const totalValorServico = dados.reduce(
      (acc, item) => acc + parseValor(item.valorServico_execucao_servico),
      0
    );

    const totalCustos = dados.reduce(
      (acc, item) => acc + parseValor(item.valor_execucao_servico),
      0
    );

    const totalEmAberto = dados
      .filter((i) => !i.dataConclusao_execucao_servico)
      .reduce(
        (acc, item) => acc + parseValor(item.valorServico_execucao_servico),
        0
      );

    let y = (doc as any).lastAutoTable.finalY + 10;

    doc.setFontSize(14);
    doc.text("Resumo Geral", 10, y);
    y += 8;

    doc.setFontSize(11);
    doc.text(`Total de OS: ${totalOS}`, 10, y);
    y += 6;

    doc.text(
      `Valor Total dos Serviços: R$ ${totalValorServico.toLocaleString(
        "pt-BR",
        { minimumFractionDigits: 2 }
      )}`,
      10,
      y
    );
    y += 6;

    doc.text(
      `Valor Total dos Custos: R$ ${totalCustos.toLocaleString("pt-BR", {
        minimumFractionDigits: 2,
      })}`,
      10,
      y
    );
    y += 6;

    doc.text(
      `Valor dos Serviços em Aberto: R$ ${totalEmAberto.toLocaleString(
        "pt-BR",
        { minimumFractionDigits: 2 }
      )}`,
      10,
      y
    );

    // =======================
    // DOWNLOAD
    // =======================
    doc.save("relatorio_os.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>
  );
}
