import { describe, it, expect } from "vitest";
import { epcExtractors } from "./epc";
import type { Brondocument, GeextraheerdeWaarneming } from "../perceptie";

// ── AUT-S1 · Extractor: EPC ──────────────────────────────────────────────────

const extractor = epcExtractors[0].extractor;
const doc = (tekst: string): Brondocument => ({ ref: "epc.pdf", bronType: "epc", tekst });
const veld = (ws: GeextraheerdeWaarneming[], p: string) => ws.find((w) => w.veldpad === p);

const TEKST = `ENERGIEPRESTATIECERTIFICAAT
Certificaatnummer: 20260315-0002456789-RES-1
Energielabel: C
Specifiek verbruik: 245 kWh/m²jaar
Opnamedatum: 15/01/2026
Geldig tot: 14/01/2036
Energiedeskundige: PROEFPERSOON Energie BV`;

describe("epcExtractor", () => {
  it("is geregistreerd voor het brontype epc", () => {
    expect(epcExtractors[0].bronType).toBe("epc");
  });

  it("leest label, nummer en verbruik", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "attesten.epc.label")).toMatchObject({ waarde: "C", zekerheid: "zeker" });
    expect(veld(ws, "attesten.epc.nummer")?.waarde).toBe("20260315-0002456789-RES-1");
    expect(veld(ws, "attesten.epc.verbruik")?.waarde).toBe(245);
  });

  it("leest geldigheids- en opnamedatum genormaliseerd naar ISO", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "attesten.epc.geldigTot")?.waarde).toBe("2036-01-14");
    expect(veld(ws, "attesten.epc.datum")?.waarde).toBe("2026-01-15");
  });

  it("gokt niets bij lege tekst", () => {
    expect(extractor(doc(""))).toEqual([]);
  });
});
