// ── AUT-S1 · Extractor: kadastraal uittreksel (legger / matrice cadastrale) ──
// Leest de kadastrale identificatie en het kadastraal inkomen. Het kadastraal
// uittreksel is een gezaghebbende bron voor perceelsgegevens en KI
// (bronPrioriteit 2). Structuur is doorgaans veldsgewijs ("Afdeling: ...",
// "Sectie: A", "Perceelnummer: 88/00B000", "K.I.: 1.250 EUR").

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

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

  const gemeente = eersteMatch(t, [/gemeente\s*:\s*([^\n]+)/i]);
  if (gemeente) w.push(waarneming(doc, "goed.gemeente", gemeente, "zeker"));

  const afdeling = eersteMatch(t, [/afdeling\s*:?\s*([^\n]+)/i]);
  if (afdeling) w.push(waarneming(doc, "goed.afdeling", afdeling, "zeker"));

  const sectie = eersteMatch(t, [/sectie\s*:?\s*([A-Z][0-9]*)\b/i]);
  if (sectie) w.push(waarneming(doc, "goed.sectie", sectie, "zeker"));

  const perceel = eersteMatch(t, [
    /perceel\s*(?:nummer|nr\.?|identificatie)?\s*:?\s*([0-9][0-9A-Z/]*)/i,
  ]);
  if (perceel) w.push(waarneming(doc, "goed.perceelnummer", perceel, "zeker"));

  const ki = zoekBedrag(t, [
    /(?:kadastraal inkomen|k\.?i\.?|niet-geïndexeerd\s+ki)\s*:?\s*(?:€|EUR)?\s*([\d.]+(?:,\d{2})?)/i,
  ]);
  if (ki !== undefined) w.push(waarneming(doc, "goed.kadastraalInkomen", ki, "zeker"));

  const opp = zoekBedrag(t, [
    /(?:oppervlakte|grondoppervlakte)\s*:?\s*([\d.]+(?:,\d{2})?)\s*(?:m²|m2|ca|centiare|are)?/i,
  ]);
  if (opp !== undefined) w.push(waarneming(doc, "goed.oppervlakte", opp, "waarschijnlijk"));

  const bouwjaar = eersteMatch(t, [/bouwjaar\s*:?\s*((?:19|20)\d{2})/i]);
  if (bouwjaar) w.push(waarneming(doc, "goed.bouwjaar", Number(bouwjaar), "waarschijnlijk"));

  return w;
}

export const kadastraalExtractors: ExtractorRegistratie[] = [
  { bronType: "kadastraal-uittreksel", extractor: extractKadastraal },
];
