import { describe, it, expect } from "vitest";
import { POST } from "./route";
import { gebruikslogOpslag } from "@/lib/gebruikslog";

function maakRequest(body: unknown): Request {
  return new Request("http://localhost/api/dossier/aktetype", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(body),
  });
}

describe("POST /api/dossier/aktetype", () => {
  it("bepaalt de verkoopakte met zekerheid bij een gekende compromisdatum", async () => {
    const res = await POST(maakRequest({ dossiertype: "verkoop-zonder-krediet", heeftCompromisdatum: true }));
    expect(res.status).toBe(200);
    const json = await res.json();
    expect(json.akteTypeKeuze.akteType).toBe("verkoopakte");
    expect(json.akteTypeKeuze.zekerheid).toBe("zeker");
    expect(json.modelGevonden).toBe(true);
  });

  it("is onduidelijk zonder compromisdatum", async () => {
    const res = await POST(maakRequest({ dossiertype: "verkoop-met-krediet" }));
    const json = await res.json();
    expect(json.akteTypeKeuze.zekerheid).toBe("onduidelijk");
    expect(json.akteTypeKeuze.alternatieven).toContain("verkoopakte");
  });

  it("kiest de aangifte van nalatenschap (zeker) en vindt het model bij een nalatenschap", async () => {
    const res = await POST(maakRequest({ dossiertype: "nalatenschap" }));
    const json = await res.json();
    expect(json.akteTypeKeuze.akteType).toBe("aangifte-nalatenschap");
    expect(json.akteTypeKeuze.zekerheid).toBe("zeker");
    expect(json.modelGevonden).toBe(true);
  });

  it("geeft 400 bij ontbrekend of ongeldig dossiertype", async () => {
    const res = await POST(maakRequest({ dossiertype: "onbestaand" }));
    expect(res.status).toBe(400);
  });

  it("registreert geen gebruikslog-signaal wanneer er wél een model gevonden wordt", async () => {
    const voor = (await gebruikslogOpslag().lijst()).length;
    await POST(maakRequest({ dossiertype: "verkoop-zonder-krediet", heeftCompromisdatum: true }));
    const na = (await gebruikslogOpslag().lijst()).length;
    expect(na).toBe(voor);
  });

  it("registreert geen gebruikslog-signaal bij nalatenschap, want het aangiftemodel wordt gevonden", async () => {
    const voor = (await gebruikslogOpslag().lijst()).length;
    const res = await POST(maakRequest({ dossiertype: "nalatenschap" }));
    const json = await res.json();
    expect(json.modelGevonden).toBe(true);
    const na = (await gebruikslogOpslag().lijst()).length;
    expect(na).toBe(voor);
  });
});
