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

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

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

const TEKST = `AANKOOPAKTE
Akte verleden op 12/06/2015 voor notaris X te Leuven.
Het onroerend goed gelegen te 3080 Tervuren, Dorpsstraat 12.
Ten kadaster gekend als sectie B nummer 88 F 22, groot 6 are 50 centiare.
Onder de last van een erfdienstbaarheid van doorgang.`;

describe("eigendomstitelExtractor", () => {
  it("is geregistreerd voor het brontype eigendomstitel", () => {
    expect(eigendomstitelExtractors[0].bronType).toBe("eigendomstitel");
  });

  it("leest de titeldatum en het adres met hoge zekerheid", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "eigendomstitel.datum")).toMatchObject({ waarde: "2015-06-12", zekerheid: "zeker" });
    expect(veld(ws, "goed.adres")?.waarde).toBe("3080 Tervuren, Dorpsstraat 12");
  });

  it("leest de kadastrale aanduiding naar de *Titel-velden", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "goed.sectieTitel")?.waarde).toBe("B");
    expect(veld(ws, "goed.perceelnummerTitel")?.waarde).toBe("88 F 22");
    expect(veld(ws, "goed.oppervlakteTitel")?.waarde).toBe("6 are 50 centiare");
    // geen actueel-kadastervelden — die horen bij de kadaster-extractor
    expect(veld(ws, "goed.sectie")).toBeUndefined();
  });

  it("leest de erfdienstbaarheid", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "eigendomstitel.erfdienstbaarheden")?.waarde).toContain("doorgang");
  });

  it("valt zonder gelabelde datum terug op lage zekerheid", () => {
    const ws = extractor(doc("Verkregen in 01/02/2000 zonder aktevermelding."));
    expect(veld(ws, "eigendomstitel.datum")).toMatchObject({ waarde: "2000-02-01", zekerheid: "onzeker" });
  });
});
