// ── Voorbeelden via de échte dossierketen ────────────────────────────────────
// Opdracht notaris 2026-07-11: "voorbeeld moet echte workflow volgen". Het
// modelvoorbeeld (ModellenTab, ValiderenTab, kwaliteitsnazicht) wordt daarom
// niet langer uitsluitend met losse demo-patronen gevuld, maar met de waarden
// en partij-herhalingen die de ECHTE keten (fictief demo-dossier →
// maakDossierUitIntakeResultaat → dossierNaarParameterwaarden →
// dossierNaarPartijHerhalingen → genereerDocument) oplevert — dezelfde functies
// die een echt dossier doorlopen. De PATRONEN-demo's (voorbeeldwaarden.ts)
// blijven enkel de terugval voor parameters zonder dossierbron.
//
// Dit bestand leeft bewust in lib/ (niet data/): de gelaagdheid app →
// components → lib → data laat data niet toe om lib/dossier aan te spreken;
// hier kan dat wél, en de UI-componenten mogen lib importeren.
//
// GEEN dossierdata: alle personen, goederen en bedragen hieronder zijn
// fictief maar realistisch (zelfde demo-cast als voorbeeldwaarden.ts).

import type { Herhaling, Modeldocument, Modelonderdeel, Taal } from "@/data/modeldocumenten";
import { vulModelVoorbeeldIn } from "@/data/modeldocumenten";
import { DOSSIER_INTAKE_SCHEMA, dossierVeldenUitIntake, maakDossierUitIntakeResultaat } from "@/lib/dossier/intake";
import { dossierNaarParameterwaarden, dossierNaarPartijHerhalingen } from "@/lib/dossier/parameters";
import type { Dossier } from "@/lib/dossier/types";

/** De vaste demo-cast: dezelfde fictieve personen als in voorbeeldwaarden.ts. */
const DEMO_PARTIJ_A = {
  naam: "Peeters",
  voornaam: "Jan August",
  geslacht: "man",
  burgerlijkeStaat: "gehuwd",
  geboortedatum: "1985-03-12",
  geboorteplaats: "Leuven",
  rijksregisternummer: "85.03.12-345.67",
  adres: "3000 Leuven, Kerkstraat 12",
  // Zonder aanspreking: de tekst leest taalneutraal ("Gehuwd met …"/"Marié à …").
  echtgenoot: "De Smet Sofie",
  huwelijksplaats: "Leuven",
  huwelijksdatum: "2012-09-05",
  huwelijksstelsel: "scheiding van goederen",
  huwelijkscontractNotaris: "Ann Janssens",
  huwelijkscontractPlaats: "Leuven",
  huwelijkscontractDatum: "2012-08-28",
  // Eén latere stelselwijziging: zo toont het voorbeeld ook de volledige
  // wijzigingszin van de canonieke identiteitsclausule (opdracht notaris:
  // "met ook huwelijksstelsel en wijzigingen etc.").
  wijzigingenStelsel: [{ notaris: "Peter Van Hove", plaats: "Mechelen", datum: "2020-06-10" }],
};

const DEMO_PARTIJ_B = {
  naam: "Janssens",
  voornaam: "Marie Sofie",
  geslacht: "vrouw",
  burgerlijkeStaat: "ongehuwd",
  geboortedatum: "1990-07-05",
  geboorteplaats: "Mechelen",
  rijksregisternummer: "90.07.05-222.33",
  adres: "3080 Tervuren, Dorpsstraat 12",
};

const DEMO_GOED = {
  adres: "Bosstraat 45, 3080 Tervuren",
  type: "woning",
  gemeente: "Tervuren",
  sectie: "C",
  perceelnummer: "88/B",
  kadastraalInkomen: 1250,
  oppervlakte: 540,
};

const DEMO_ATTESTEN = {
  epc: { datum: "2026-01-15", nummer: "EPC-987", label: "D", geldigTot: "2036-01-15", verbruik: 245 },
  bodem: { datum: "2026-03-02", inhoud: "blanco" },
  elektrischeKeuring: { organisme: "Vinçotte", datum: "2026-03-10", conclusie: "conform" },
};

/** Bouwt één fictief demo-dossier uit een intake-JSON — exact de echte importflow. */
function bouwDemoDossier(intake: Record<string, unknown>): Dossier {
  return maakDossierUitIntakeResultaat(dossierVeldenUitIntake({ schema: DOSSIER_INTAKE_SCHEMA, ...intake }), {
    id: "voorbeeld-demo",
    status: "ontwerp-in-opmaak",
    aangemaakt: "2026-03-01T00:00:00.000Z",
    aangepast: "2026-03-01T00:00:00.000Z",
  });
}

const DEMO_VERKOOP: Dossier = bouwDemoDossier({
  dossiertype: "verkoop-zonder-krediet",
  verkoopdocument: "compromis",
  referentie: "2026/0123",
  bron: "compromis",
  gebruik: "vrij",
  zonnepanelen: false,
  partijen: [
    { ...DEMO_PARTIJ_A, rol: "verkoper" },
    { ...DEMO_PARTIJ_B, rol: "koper" },
  ],
  goed: DEMO_GOED,
  prijs: 250000,
  voorschot: 25000,
  compromisdatum: "2026-03-15",
  attesten: DEMO_ATTESTEN,
});

const DEMO_SCHENKING: Dossier = bouwDemoDossier({
  dossiertype: "schenking",
  referentie: "2026/0123",
  partijen: [
    { ...DEMO_PARTIJ_A, rol: "schenker" },
    { ...DEMO_PARTIJ_B, rol: "begiftigde" },
  ],
  goed: DEMO_GOED,
});

/**
 * Het demo-dossier dat bij het akteType van een model past. De verkoop-cast is
 * de default; schenkingsmodellen krijgen schenker/begiftigde. Voor akteTypes
 * buiten deze families leveren we wél de dossierwaarden (kantoor, goed,
 * prijs, identiteitsblokken op rolgebonden namen die daar toch niet
 * voorkomen) maar GEEN partij-herhalingen — anders zouden bv. de comparanten
 * van een huwelijksovereenkomst als "VERKOPER/KOPER" gelabeld worden.
 */
function demoDossierVoor(akteType: string): { dossier: Dossier; metHerhalingen: boolean } {
  const t = akteType.toLowerCase();
  if (t.includes("schenking")) return { dossier: DEMO_SCHENKING, metHerhalingen: true };
  const verkoopFamilie = t.includes("verkoop") || t.includes("compromis") || t.includes("aankoopbod");
  return { dossier: DEMO_VERKOOP, metHerhalingen: verkoopFamilie };
}

/** Waarden + partij-herhalingen uit de echte keten, voor een model(taal). */
export function voorbeeldWorkflowInvulling(
  akteType: string,
  taal: Taal,
  onderdelen: Modelonderdeel[]
): { waarden: Record<string, string>; partijHerhalingen: Herhaling[] } {
  const { dossier, metHerhalingen } = demoDossierVoor(akteType);
  return {
    waarden: dossierNaarParameterwaarden(dossier, undefined, onderdelen, taal),
    partijHerhalingen: metHerhalingen ? dossierNaarPartijHerhalingen(dossier, taal) : [],
  };
}

/**
 * Het volledige modelvoorbeeld via de echte workflow: dossierwaarden en
 * partij-herhalingen uit de demo-dossierketen, PATRONEN als terugval voor de
 * parameters zonder dossierbron, alle hypotheses zichtbaar (bibliotheekdoel).
 */
export function vulModelVoorbeeldInViaWorkflow(model: Modeldocument, onderdelen: Modelonderdeel[]): string {
  const taal: Taal = model.taal === "fr" ? "fr" : "nl";
  return vulModelVoorbeeldIn(model, onderdelen, voorbeeldWorkflowInvulling(model.akteType, taal, onderdelen));
}
