// ── AUT-S1 · Extractor: identiteitsstuk (eID / identiteitskaart) ─────────────
// Leest de identificatie van één partij: naam, voornaam, geboortedatum/-plaats,
// rijksregisternummer en verblijfadres. Voedt partijen[0].*.
//
// GDPR (AUT-O3, beslissing 3): dit stuk bevat persoonsgegevens. De perceptie
// draait STRIKT LOKAAL; de waarnemingen (met PII) verlaten het lokale milieu
// niet — enkel de geanonimiseerde structuur stroomt verder (zoals de bestaande
// handoff). De `ref` blijft een pseudoniem, geen naam.

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

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

  // \b vóór "naam" voorkomt dat de "Voornaam:"-regel als naam wordt opgevist.
  const naam = eersteMatch(t, [/\bnaam\s*(?:\/\s*nom)?\s*:\s*([^\n]+)/i, /surname\s*:\s*([^\n]+)/i]);
  if (naam) w.push(waarneming(doc, "partijen[0].naam", naam.trim(), "zeker"));

  const voornaam = eersteMatch(t, [
    /voorna(?:a)?m(?:en)?\s*(?:\/\s*pr[ée]noms?)?\s*:\s*([^\n]+)/i,
    /(?:given names?|first name)\s*:\s*([^\n]+)/i,
  ]);
  if (voornaam) w.push(waarneming(doc, "partijen[0].voornaam", voornaam.trim(), "zeker"));

  const geboortedatum = zoekDatumNaLabel(t, [
    /(?:geboortedatum|geboren op|date of birth)\s*:?\s*(.+)/i,
    /geboren te\s+[^\n,]+\s+op\s+(.+)/i,
  ]);
  if (geboortedatum) w.push(waarneming(doc, "partijen[0].geboortedatum", geboortedatum, "zeker"));

  const geboorteplaats = eersteMatch(t, [
    /geboorteplaats\s*:?\s*([^\n]+)/i,
    /geboren te\s+([^\n,]+?)(?:\s+op\b|[\n,]|$)/i,
  ]);
  if (geboorteplaats) w.push(waarneming(doc, "partijen[0].geboorteplaats", geboorteplaats.trim(), "waarschijnlijk"));

  const rrn = eersteMatch(t, [
    /(?:rijksregisternummer|rrn|national number)?\s*:?\s*(\d{2}[.\s]?\d{2}[.\s]?\d{2}[-\s]?\d{3}[.\s-]?\d{2})/i,
  ]);
  if (rrn) w.push(waarneming(doc, "partijen[0].rijksregisternummer", rrn.trim(), "zeker"));

  const adres = eersteMatch(t, [
    /(?:adres|verblijfplaats|woonplaats|hoofdverblijfplaats|address)\s*:?\s*([^\n]+)/i,
  ]);
  if (adres) w.push(waarneming(doc, "partijen[0].adres", adres.trim(), "waarschijnlijk"));

  return w;
}

export const identiteitsstukExtractors: ExtractorRegistratie[] = [
  { bronType: "identiteitsstuk", extractor: extractIdentiteitsstuk },
];
