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

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

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

describe("hypotheekattestExtractor", () => {
  it("is geregistreerd voor het brontype hypotheekattest", () => {
    expect(hypotheekattestExtractors[0].bronType).toBe("hypotheekattest");
  });

  it("leest schuldeiser en bedrag van een inschrijving", () => {
    const ws = extractor(doc(`HYPOTHECAIRE STAAT
Hypothecaire inschrijving ten voordele van KBC Bank NV.
Inschrijving in hoofdsom van 200.000,00 EUR.`));
    expect(veld(ws, "hypothecaireLasten[0].schuldeiser")?.waarde).toBe("KBC Bank NV");
    expect(veld(ws, "hypothecaireLasten[0].bedrag")).toMatchObject({ waarde: 200000, zekerheid: "zeker" });
  });

  it("herkent een blanco staat (geen inschrijvingen)", () => {
    const ws = extractor(doc("De staat vermeldt geen hypothecaire inschrijvingen."));
    expect(veld(ws, "hypothecaireLasten.aanwezig")).toMatchObject({ waarde: false, zekerheid: "zeker" });
    expect(veld(ws, "hypothecaireLasten[0].bedrag")).toBeUndefined();
  });

  it("gokt geen royement (dat beslist de notaris)", () => {
    const ws = extractor(doc("Inschrijving in hoofdsom van 200.000,00 EUR."));
    expect(ws.some((w) => w.veldpad.includes("moetGeroyeerd"))).toBe(false);
  });
});
