// ── AUT-S1 · Extractor: syndicusafrekening (bericht van de syndicus) ─────────
// Leest de gegevens van de mede-eigendom uit het antwoord/de afrekening van de
// syndicus: het kavelnummer, de gewone lasten per trimester, het aandeel in de
// gemene delen en de datum van het bericht. Voedt medeEigendom.*. Of de lasten
// betwist zijn is een apart, expliciet feit (medeEigendomLastenBetwist) dat
// hier niet geraden wordt.

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

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

  const kavel = eersteMatch(t, [
    /(?:kavel|lot|privatief)\s*(?:nummer|nr\.?)?\s*:?\s*([\w/]+)/i,
  ]);
  if (kavel) w.push(waarneming(doc, "medeEigendom.nummerKavel", kavel, "waarschijnlijk"));

  const lasten = zoekBedrag(t, [
    /(?:gewone\s+)?(?:lasten|provisie|bijdrage|kosten)\s*(?:per trimester|trimestrieel|per kwartaal|kwartaal)?\s*:?\s*(?:€|EUR)?\s*([\d.]+(?:,\d{2})?)/i,
  ]);
  if (lasten !== undefined) w.push(waarneming(doc, "medeEigendom.lastenPerTrimester", lasten, "waarschijnlijk"));

  const aandeel = eersteMatch(t, [
    /(?:aandeel|quotiteit)\s*(?:in de\s+)?(?:gemene delen|gemeenschappelijke delen)?\s*:?\s*([\d./]+(?:\s*\/\s*[\d.]+)?)/i,
  ]);
  if (aandeel) w.push(waarneming(doc, "medeEigendom.aandeelGemeneDelen", aandeel.trim(), "waarschijnlijk"));

  const datum = zoekDatumNaLabel(t, [
    /(?:datum\s+bericht|bericht(?:\s+van de syndicus)?\s+(?:dd\.?|van|op)|opgesteld op|datum)\s*:?\s*(.+)/i,
  ]);
  if (datum) w.push(waarneming(doc, "medeEigendom.datumBerichtSyndicus", datum, "zeker"));

  return w;
}

export const syndicusExtractors: ExtractorRegistratie[] = [
  { bronType: "syndicusafrekening", extractor: extractSyndicus },
];
