// ── AUT-S1 · Extractor: EPC (energieprestatiecertificaat) ────────────────────
// Leest label, certificaatnummer, specifiek verbruik, geldigheids- en
// opmaakdatum en de energiedeskundige uit een EPC. Voedt attesten.epc; het EPC
// is de enige gezaghebbende bron voor het energielabel.

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

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

  const label = eersteMatch(t, [
    /(?:energielabel|epc-label|label)\s*:?\s*(A\+*|B|C|D|E|F|G)\b/i,
  ]);
  if (label) w.push(waarneming(doc, "attesten.epc.label", label.toUpperCase(), "zeker"));

  const nummer = eersteMatch(t, [
    /(?:certificaatnummer|epc-nummer|nummer)\s*:?\s*([0-9][\w-]+)/i,
  ]);
  if (nummer) w.push(waarneming(doc, "attesten.epc.nummer", nummer, "zeker"));

  const verbruik = zoekBedrag(t, [
    /(?:specifiek\s+)?(?:energie)?verbruik\s*:?\s*([\d.]+)\s*kWh/i,
  ]);
  if (verbruik !== undefined) w.push(waarneming(doc, "attesten.epc.verbruik", verbruik, "zeker"));

  const geldigTot = zoekDatumNaLabel(t, [/(?:geldig tot|vervaldatum|geldigheidsdatum)\s*:?\s*(.+)/i]);
  if (geldigTot) w.push(waarneming(doc, "attesten.epc.geldigTot", geldigTot, "zeker"));

  const datum = zoekDatumNaLabel(t, [/(?:opnamedatum|datum opmaak|opmaakdatum|datum)\s*:?\s*(.+)/i]);
  if (datum) w.push(waarneming(doc, "attesten.epc.datum", datum, "waarschijnlijk"));

  const deskundige = eersteMatch(t, [/energiedeskundige\s*:?\s*([^\n]+)/i]);
  if (deskundige) w.push(waarneming(doc, "attesten.epc.energiedeskundige", deskundige, "waarschijnlijk"));

  return w;
}

export const epcExtractors: ExtractorRegistratie[] = [
  { bronType: "epc", extractor: extractEpc },
];
