import { describe, it, expect } from "vitest";
import { bepaalDocumenttaal } from "./taal";
import { stelOntwerpakteSamenAutonoom } from "./autonoom";
import { seedModellen, seedOnderdelen } from "@/data/modeldocumenten";
import { maakVeld, type Dossier } from "./types";
import type { Kantoor } from "@/data/kantoor";

const basis: Dossier = {
  id: "d", dossiertype: "verkoop-zonder-krediet", status: "compromis-ontvangen", verkoopdocument: "compromis",
  partijen: maakVeld([], "compromis"),
  goed: maakVeld({ adres: "x", type: "woning", gemeente: "Tervuren" }, "compromis"),
  ontbrekendeStukken: [], tegenstrijdigheden: [], aangemaakt: "x", aangepast: "x",
};

describe("bepaalDocumenttaal", () => {
  it("volgt de gebruikers-/kantoorvoorkeurstaal bij gebrek aan dossiertaal", () => {
    expect(bepaalDocumenttaal(basis, { voorkeurstaal: "fr" } as Kantoor)).toBe("fr");
    expect(bepaalDocumenttaal(basis, { voorkeurstaal: "nl" } as Kantoor)).toBe("nl");
    expect(bepaalDocumenttaal(basis, undefined)).toBe("nl");
  });

  it("een uitdrukkelijke dossiertaal heeft voorrang (indication contraire claire)", () => {
    expect(bepaalDocumenttaal({ ...basis, taal: "fr" }, { voorkeurstaal: "nl" } as Kantoor)).toBe("fr");
  });
});

describe("autonoom: model in de gevraagde taal", () => {
  it("kiest het FR-compromismodel bij taal 'fr'", () => {
    const o = stelOntwerpakteSamenAutonoom(basis, seedModellen, seedOnderdelen, "Vlaanderen", undefined, "fr");
    expect(o.model?.id).toBe("verkoopovereenkomst-heldere-taal-fr");
  });

  it("kiest het NL-model bij taal 'nl' (standaard)", () => {
    const o = stelOntwerpakteSamenAutonoom(basis, seedModellen, seedOnderdelen, "Vlaanderen");
    expect(o.model?.id).toBe("verkoopovereenkomst-heldere-taal");
  });
});
