import { mkdir, writeFile } from "node:fs/promises";
import path from "node:path";

import { describe, expect, it } from "vitest";

import { renderAttestationImpotsPdf } from "@/services/attestation-impots-pdf.service";

const data = {
  formuleSoussignataire: "soussignée",
  signataireNom: "Béatrice LAFRANCE",
  signataireFonction: "Directrice des ressources humaines",
  titreNomPrenom: "Monsieur Nadir ABABSI",
  domicilie: "domicilié",
  adresseLigne: "125, avenue de la République - 59000 Lille",
  entreprise: "S.A.S. ENVIE 2E NORD",
  typeContrat: "contrat à durée déterminée d'insertion à temps complet",
  dateEmbauche: "2026-05-11",
  dateFinContrat: "",
  poste: "agent de production polyvalent",
  dateDocument: "2026-08-11",
  lieuDocument: "Lesquin",
  estToujoursDansEffectifs: true,
};

describe("Unit — attestation impôts PDF", () => {
  it("renders a valid one-page PDF", async () => {
    const pdf = await renderAttestationImpotsPdf(data);

    if (process.env.PDF_QA_OUTPUT) {
      const outputPath = path.resolve(process.env.PDF_QA_OUTPUT);
      await mkdir(path.dirname(outputPath), { recursive: true });
      await writeFile(outputPath, pdf);
    }

    expect(pdf.subarray(0, 5).toString()).toBe("%PDF-");
    expect(pdf.length).toBeGreaterThan(1_000);
  });

  it("renders a former employee without requiring an end date", async () => {
    const pdf = await renderAttestationImpotsPdf({
      ...data,
      estToujoursDansEffectifs: false,
    });

    expect(pdf.subarray(0, 5).toString()).toBe("%PDF-");
  });
});
