import { describe, it, expect } from "vitest";
import { compromisExtractors } from "./compromis";
import type { Brondocument, GeextraheerdeWaarneming } from "../perceptie";

// ── AUT-S1 · Extractor: compromis ────────────────────────────────────────────

const extractor = compromisExtractors[0].extractor;
const doc = (tekst: string): Brondocument => ({ ref: "compromis.pdf", bronType: "compromis", tekst });
const veld = (ws: GeextraheerdeWaarneming[], p: string) => ws.find((w) => w.veldpad === p);

const TEKST = `VERKOOPOVEREENKOMST (COMPROMIS)
Opgemaakt te Tervuren op 15/03/2026.
Verkoper: PROEFPERSOON Jan
Koper: SPECIMEN Marie
Het onroerend goed gelegen te 3080 Tervuren, Dorpsstraat 12.
Kadastraal gekend als: afdeling 1, sectie B, nr 88/00B000.
Koopprijs: 385.000,00 EUR
Voorschot: 38.500,00 EUR`;

describe("compromisExtractor", () => {
  it("is geregistreerd voor het brontype compromis", () => {
    expect(compromisExtractors[0].bronType).toBe("compromis");
  });

  it("leest prijs, voorschot en datum met hoge zekerheid", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "prijs")).toMatchObject({ waarde: 385000, zekerheid: "zeker" });
    expect(veld(ws, "voorschot")).toMatchObject({ waarde: 38500, zekerheid: "zeker" });
    expect(veld(ws, "compromisdatum")).toMatchObject({ waarde: "2026-03-15", zekerheid: "zeker" });
  });

  it("leest adres en kadastrale gegevens", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "goed.adres")?.waarde).toBe("3080 Tervuren, Dorpsstraat 12");
    expect(veld(ws, "goed.kadastraleGegevens")?.waarde).toBe("afdeling 1, sectie B, nr 88/00B000");
  });

  it("houdt partijnamen op lage zekerheid en verwart koper niet met verkoper", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "partijen.verkoper")).toMatchObject({ waarde: "PROEFPERSOON Jan", zekerheid: "onzeker" });
    expect(veld(ws, "partijen.koper")).toMatchObject({ waarde: "SPECIMEN Marie", zekerheid: "onzeker" });
  });

  it("hangt bron en ref aan elke waarneming en gokt niets bij lege tekst", () => {
    const ws = extractor(doc(TEKST));
    expect(ws.every((w) => w.bronType === "compromis" && w.brondocumentRef === "compromis.pdf")).toBe(true);
    expect(extractor(doc("geen relevante inhoud"))).toEqual([]);
  });
});
