// ── AUT-S1 · Extractor: kredietofferte (bankaanbod hypothecair krediet) ──────
// Leest de kredietgever, het kredietbedrag, of de offerte aanvaard is en de
// geldigheidstermijn. Voedt het kredietofferte-veld (intake.ts). De
// aanvaarding stuurt de opschortende voorwaarde in het compromis — bij twijfel
// niet gokken (laat "aanvaard" weg zodat het escaleert).

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

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

  const bank = eersteMatch(t, [
    /(?:kredietgever|kredietinstelling|bank|geldschieter|maatschappij)\s*:?\s*([^\n,]+)/i,
  ]);
  if (bank) w.push(waarneming(doc, "kredietofferte.bank", bank.replace(/[.\s]+$/, ""), "waarschijnlijk"));

  const bedrag = zoekBedrag(t, [
    /(?:kredietbedrag|leningsbedrag|kredietsom|krediet|lening|hoofdsom|bedrag)\s*(?:van|:|ten belope van)?\s*(?:€|EUR)?\s*([\d.]+(?:,\d{2})?)/i,
  ]);
  if (bedrag !== undefined) w.push(waarneming(doc, "kredietofferte.bedrag", bedrag, "zeker"));

  // Aanvaarding: enkel bij een ondubbelzinnige bewoording; anders niet gokken.
  if (/\b(?:aanvaard|goedgekeurd|toegekend|akkoord)\b/i.test(t)) {
    w.push(waarneming(doc, "kredietofferte.aanvaard", true, "waarschijnlijk"));
  } else if (/\b(?:geweigerd|afgewezen|in behandeling|onder voorbehoud)\b/i.test(t)) {
    w.push(waarneming(doc, "kredietofferte.aanvaard", false, "waarschijnlijk"));
  }

  const termijn = eersteMatch(t, [
    /(?:geldig(?:heid)?|termijn|aanvaardingstermijn)\s*(?:van|:|gedurende)?\s*(\d+)\s*weken/i,
  ]);
  if (termijn) w.push(waarneming(doc, "kredietofferte.termijnWeken", Number(termijn), "waarschijnlijk"));

  return w;
}

export const kredietofferteExtractors: ExtractorRegistratie[] = [
  { bronType: "kredietofferte", extractor: extractKredietofferte },
];
