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

describe("GET /api/dossier/verbeterlus", () => {
  it("levert gerangschikte verbeterkandidaten uit de echte bibliotheek-audit (geen gebruikslog nodig)", async () => {
    const res = await GET();
    expect(res.status).toBe(200);
    const json = await res.json();
    expect(Array.isArray(json.kandidaten)).toBe(true);
    // De seed-bibliotheek draagt vandaag reële audit-waarschuwingen (o.m.
    // parameter-taalpariteit) — de motor levert dus altijd minstens één
    // kandidaat op, ook zonder gebruikslog-events.
    expect(json.kandidaten.length).toBeGreaterThan(0);
    expect(json.aantal).toBe(json.kandidaten.length);
    expect(typeof json.toelichting).toBe("string");
  });

  it("elke kandidaat draagt een geldig kanaal en is gesorteerd op score (hoogste eerst)", async () => {
    const res = await GET();
    const json = await res.json();
    const kanalen = ["bibliotheek", "code", "kennis"];
    for (const k of json.kandidaten) {
      expect(kanalen, k.sleutel).toContain(k.kanaal);
      expect(typeof k.titel).toBe("string");
      expect(typeof k.omschrijving).toBe("string");
      expect(k.signalen.length).toBeGreaterThan(0);
    }
    const scores = json.kandidaten.map((k: { score: number }) => k.score);
    expect(scores).toEqual([...scores].sort((a: number, b: number) => b - a));
  });

  it("muteert niets: geen enkele kandidaat draagt een indien-/opgeslagen-status (louter een leeslijst)", async () => {
    const res = await GET();
    const json = await res.json();
    for (const k of json.kandidaten) {
      expect(k).not.toHaveProperty("status");
      expect(k).not.toHaveProperty("id");
    }
  });
});
