import { describe, it, expect } from "vitest";
import { POST } from "./route";

function maakRequest(body: unknown): Request {
  return new Request("http://localhost/api/dossier/volgende-stappen", {
    method: "POST",
    body: JSON.stringify(body),
  });
}

describe("POST /api/dossier/volgende-stappen", () => {
  it("geeft de huidige stap met acties en mailcategorieën terug", async () => {
    const res = await POST(maakRequest({ dossiertype: "verkoop-met-krediet", status: "compromis-ontvangen" }));
    expect(res.status).toBe(200);
    const json = await res.json();
    expect(json.huidigeStap?.status).toBe("compromis-ontvangen");
    expect(json.huidigeStap?.acties.length).toBeGreaterThan(0);
    expect(Array.isArray(json.huidigeStap?.mailCategorieen)).toBe(true);
    expect(json.stappen.length).toBeGreaterThan(3);
    // Zonder compromisdatum geen termijnen (en geen valse onzekerheid daarover).
    expect(json.termijnen).toBeUndefined();
  });

  it("voegt bij een appartement de syndicus-actie toe", async () => {
    const res = await POST(maakRequest({ dossiertype: "verkoop-met-krediet", status: "compromis-ontvangen", appartement: true }));
    const json = await res.json();
    expect(json.huidigeStap?.acties.join(" ")).toContain("syndicus");
  });

  it("geeft mét compromisdatum ook de lopende termijnen terug", async () => {
    const res = await POST(
      maakRequest({ dossiertype: "verkoop-zonder-krediet", status: "opzoekingen-lopend", compromisdatum: "2026-05-12", vandaag: "2026-06-01" })
    );
    const json = await res.json();
    expect(json.termijnen?.some((t: { id: string }) => t.id === "uiterste-datum-akte")).toBe(true);
  });

  it("weigert een onbekende status met een duidelijke fout", async () => {
    const res = await POST(maakRequest({ dossiertype: "verkoop-met-krediet", status: "bestaat-niet" }));
    expect(res.status).toBe(400);
    expect((await res.json()).fout).toContain("status");
  });
});
