import { describe, it, expect } from "vitest";
import { seedModellen } from "@/data/modeldocumenten";
import { kiesModelInTaal } from "./taalkeuze";

const m = (id: string) => seedModellen.find((x) => x.id === id)!;

describe("kiesModelInTaal", () => {
  it("behoudt het model als het al in de gevraagde taal is", () => {
    const r = kiesModelInTaal(m("verkoopovereenkomst-heldere-taal"), "nl", seedModellen);
    expect(r.gewisseld).toBe(false);
    expect(r.model.id).toBe("verkoopovereenkomst-heldere-taal");
  });

  it("schakelt van het NL heldere-taal-compromis naar de FR-vertaling", () => {
    const r = kiesModelInTaal(m("verkoopovereenkomst-heldere-taal"), "fr", seedModellen);
    expect(r.gewisseld).toBe(true);
    expect(r.model.id).toBe("verkoopovereenkomst-heldere-taal-fr");
  });

  it("schakelt het klassieke NL-compromis naar zijn eigen FR-spiegel (sinds die bestaat)", () => {
    const r = kiesModelInTaal(m("verkoopovereenkomst-compromis"), "fr", seedModellen);
    expect(r.gewisseld).toBe(true);
    expect(r.model.id).toBe("verkoopovereenkomst-compromis-fr");
  });

  it("brugt een compromis zonder eigen vertaling naar het heldere-taal-compromis (terugval)", () => {
    // Simuleer de toestand zonder FR-spiegel: het klassieke compromis valt dan
    // terug op de tweetalige heldere-taal-standaard i.p.v. NL te blijven.
    const zonderSpiegel = seedModellen.filter((x) => x.id !== "verkoopovereenkomst-compromis-fr");
    const r = kiesModelInTaal(m("verkoopovereenkomst-compromis"), "fr", zonderSpiegel);
    expect(r.gewisseld).toBe(true);
    expect(r.model.id).toBe("verkoopovereenkomst-heldere-taal-fr");
    expect(r.melding).toMatch(/heldere-taal/);
  });

  it("schakelt van het FR-compromis terug naar NL wanneer NL gevraagd is", () => {
    const r = kiesModelInTaal(m("verkoopovereenkomst-heldere-taal-fr"), "nl", seedModellen);
    expect(r.gewisseld).toBe(true);
    expect(r.model.id).toBe("verkoopovereenkomst-heldere-taal");
  });
});
