import { describe, it, expect } from "vitest";
// ── Brug dossier-/modellenlaag → opzoekingsmatrix ────────────────────────────
// Bewaakt dat de akteType→rechtshandeling-koppeling nooit naar een onbestaande
// matrix-kolom verwijst (de sleutels zijn al compile-bewaakt via AkteTypeNaam)
// en dat de kern-akteTypes met een evidente vastgoedcomponent gekoppeld
// blijven — anders verliest de dossiermodule stilzwijgend haar
// opzoekingenknop.
import {
  RECHTSHANDELING_PER_AKTETYPE,
  rechtshandelingVoorAkteType,
  rechtshandelingen,
} from "./vastgoed-opzoekingen";

describe("RECHTSHANDELING_PER_AKTETYPE", () => {
  it("verwijst uitsluitend naar bestaande rechtshandelingen in de matrix", () => {
    const bekend = new Set(rechtshandelingen.map((r) => r.id));
    for (const [akteType, handelingId] of Object.entries(RECHTSHANDELING_PER_AKTETYPE)) {
      expect(bekend.has(handelingId), `${akteType} → onbekende rechtshandeling "${handelingId}"`).toBe(true);
    }
  });

  it("dekt de kern-akteTypes met een evidente vastgoedcomponent", () => {
    for (const akteType of [
      "verkoopovereenkomst (compromis)",
      "verkoopakte",
      "schenkingsakte",
      "kredietakte",
      "basisakte",
    ] as const) {
      expect(RECHTSHANDELING_PER_AKTETYPE[akteType], akteType).toBeDefined();
    }
  });
});

describe("rechtshandelingVoorAkteType", () => {
  it("geeft de volledige rechtshandeling terug voor een gekoppeld akteType", () => {
    expect(rechtshandelingVoorAkteType("verkoopakte")?.id).toBe("verkoop");
    expect(rechtshandelingVoorAkteType("kredietakte")?.naam).toBe("Hypothecair krediet");
  });

  it("geeft undefined voor akteTypes zonder vastgoedcomponent of onbekende strings", () => {
    expect(rechtshandelingVoorAkteType("keuzetestament")).toBeUndefined();
    expect(rechtshandelingVoorAkteType("gebruikersmodel-xyz")).toBeUndefined();
  });
});
