import { describe, it, expect } from "vitest";
import { kadastraalExtractors } from "./kadastraal-uittreksel";
import type { Brondocument, GeextraheerdeWaarneming } from "../perceptie";

// ── AUT-S1 · Extractor: kadastraal uittreksel ────────────────────────────────

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

const TEKST = `KADASTRAAL UITTREKSEL
Gemeente: Tervuren
Afdeling: 1e afdeling
Sectie: B
Perceelnummer: 88/00B000
Kadastraal inkomen: 1.250 EUR
Oppervlakte: 650 m²
Bouwjaar: 1975`;

describe("kadastraalExtractor", () => {
  it("is geregistreerd voor het brontype kadastraal-uittreksel", () => {
    expect(kadastraalExtractors[0].bronType).toBe("kadastraal-uittreksel");
  });

  it("leest de kadastrale identificatie met hoge zekerheid", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "goed.gemeente")?.waarde).toBe("Tervuren");
    expect(veld(ws, "goed.afdeling")?.waarde).toBe("1e afdeling");
    expect(veld(ws, "goed.sectie")).toMatchObject({ waarde: "B", zekerheid: "zeker" });
    expect(veld(ws, "goed.perceelnummer")).toMatchObject({ waarde: "88/00B000", zekerheid: "zeker" });
  });

  it("leest kadastraal inkomen, oppervlakte en bouwjaar als getallen", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "goed.kadastraalInkomen")).toMatchObject({ waarde: 1250, zekerheid: "zeker" });
    expect(veld(ws, "goed.oppervlakte")?.waarde).toBe(650);
    expect(veld(ws, "goed.bouwjaar")?.waarde).toBe(1975);
  });

  it("gokt niets bij een leeg uittreksel", () => {
    expect(extractor(doc("leeg"))).toEqual([]);
  });
});
