import { renderToBuffer } from "@react-pdf/renderer";
import { format } from "date-fns";

import { InheritanceReportDocument } from "@/pdf/templates/inheritance-report-document";
import type { InheritancePdfReportData } from "@/pdf/types";
import type { PersistedCalculation } from "@/types/calculation";

const DEFAULT_DISCLAIMER =
  "This report is generated for informational purposes and should be reviewed by a qualified Islamic scholar.";

function normalizeQuranReference(reference: string): string {
  return reference.replace("Quran", "Surah An-Nisa");
}

export function buildInheritancePdfReportData(
  calculation: PersistedCalculation,
): InheritancePdfReportData {
  const uniqueReferences = Array.from(
    new Set(
      calculation.resultJson.shares
        .map((share) => share.quranReference)
        .filter((value): value is Exclude<typeof value, undefined> => Boolean(value)),
    ),
  );

  return {
    reportId: calculation.id,
    reportTitle: calculation.title,
    generatedAt: format(new Date(), "PPP p"),
    madhab: calculation.madhab,
    estate: {
      totalEstate: calculation.totalEstate,
      debts: calculation.debts,
      funeralExpenses: calculation.funeralExpenses,
      wasiyyahAmount: calculation.wasiyyahAmount,
      netEstate: calculation.netEstate,
      currency: calculation.currency,
    },
    heirs: calculation.resultJson.shares,
    quranReferences: uniqueReferences.map(normalizeQuranReference),
    disclaimer: DEFAULT_DISCLAIMER,
  };
}

export async function generateInheritancePdfBuffer(
  calculation: PersistedCalculation,
): Promise<Buffer> {
  const reportData = buildInheritancePdfReportData(calculation);
  const buffer = await renderToBuffer(
    <InheritanceReportDocument data={reportData} />,
  );

  return Buffer.from(buffer);
}
