// ── AUT-S1 · Extractor: hypotheekattest (staat der inschrijvingen) ───────────
// Leest de hypothecaire lasten die op het goed rusten: schuldeiser (bank) en
// het ingeschreven bedrag. Of een last effectief GEROYEERD moet worden is een
// juridisch besluit dat nooit geraden wordt (zie leesHypothecaireLasten in
// intake.ts) — de extractor levert enkel de waargenomen last; het royement
// beslist de notaris/dossierregie.

import type { Brondocument, ExtractorRegistratie, GeextraheerdeWaarneming } from "../perceptie";
import { waarneming, eersteMatch, zoekBedrag } from "../extractie-hulp";

function extractHypotheekattest(doc: Brondocument): GeextraheerdeWaarneming[] {
  const t = doc.tekst;
  const w: GeextraheerdeWaarneming[] = [];

  const geenInschrijving = /geen\s+(?:hypothecaire\s+)?inschrijving(?:en)?/i.test(t);
  if (geenInschrijving) {
    w.push(waarneming(doc, "hypothecaireLasten.aanwezig", false, "zeker"));
    return w;
  }

  const schuldeiser = eersteMatch(t, [
    /(?:ten (?:voordele|gunste) van|schuldeiser|kredietgever|inschrijving voor)\s*:?\s*([^\n,]+)/i,
  ]);
  if (schuldeiser) w.push(waarneming(doc, "hypothecaireLasten[0].schuldeiser", schuldeiser.replace(/[.\s]+$/, ""), "waarschijnlijk"));

  const bedrag = zoekBedrag(t, [
    /(?:inschrijving|hypotheek|in hoofdsom|bedrag)\s*(?:van|ten belope van|:|voor een bedrag van)?\s*(?:€|EUR)?\s*([\d.]+(?:,\d{2})?)/i,
  ]);
  if (bedrag !== undefined) w.push(waarneming(doc, "hypothecaireLasten[0].bedrag", bedrag, "zeker"));

  return w;
}

export const hypotheekattestExtractors: ExtractorRegistratie[] = [
  { bronType: "hypotheekattest", extractor: extractHypotheekattest },
];
