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

// ── AUT-S1 · Extractor: identiteitsstuk ──────────────────────────────────────
// Testdata is volledig fictief (PROEFPERSOON) — GDPR-invariant van de suite.

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

const TEKST = `IDENTITEITSKAART - BELGIË
Naam: PROEFPERSOON
Voornamen: Jan Pieter
Geboorteplaats: Leuven
Geboortedatum: 30/07/1985
Rijksregisternummer: 85.07.30-033.28
Adres: Dorpsstraat 12, 3080 Tervuren`;

describe("identiteitsstukExtractor", () => {
  it("is geregistreerd voor het brontype identiteitsstuk", () => {
    expect(identiteitsstukExtractors[0].bronType).toBe("identiteitsstuk");
  });

  it("verwart naam en voornaam niet", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "partijen[0].naam")?.waarde).toBe("PROEFPERSOON");
    expect(veld(ws, "partijen[0].voornaam")?.waarde).toBe("Jan Pieter");
  });

  it("leest geboortegegevens en rijksregisternummer", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "partijen[0].geboortedatum")).toMatchObject({ waarde: "1985-07-30", zekerheid: "zeker" });
    expect(veld(ws, "partijen[0].geboorteplaats")?.waarde).toBe("Leuven");
    expect(veld(ws, "partijen[0].rijksregisternummer")?.waarde).toBe("85.07.30-033.28");
  });

  it("leest het adres en hangt bron/ref aan elke waarneming", () => {
    const ws = extractor(doc(TEKST));
    expect(veld(ws, "partijen[0].adres")?.waarde).toBe("Dorpsstraat 12, 3080 Tervuren");
    expect(ws.every((w) => w.bronType === "identiteitsstuk" && w.brondocumentRef === "eid.pdf")).toBe(true);
  });
});
