// ── API: één modeldocument, opvragen en/of invullen ──────────────────────────
// Zonder relevante queryparameters: de samengestelde modeltekst (incl.
// hypotheses en {{parameters}}), de in te vullen parameters — elk mét
// omschrijving, realistisch voorbeeld en herkomst (invulhulp) — en de structuur.
// Mét queryparameters (parameternaam=waarde per parameter, en optioneel
// facultatief=onderdeelId1,onderdeelId2) wordt ook het INGEVULDE
// ontwerpdocument meegegeven: een werkdocument dat de notaris naleest en
// valideert (hypotheses blijven gemarkeerd ter keuze).

import { NextResponse } from "next/server";
import {
  seedModellen,
  seedOnderdelen,
  stelModelSamen,
  extraheerParameters,
  verwijderOpmaakMarkers,
  beschrijfParametersVoorModel,
} from "@/data/modeldocumenten";
import { registreerGebruik } from "@/lib/gebruikslog";
import { ontwerpUitQuery } from "@/lib/modeldocumenten/ontwerpUitQuery";

export async function GET(
  request: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  const { id } = await params;
  const model = seedModellen.find((m) => m.id === id);
  if (!model) {
    await registreerGebruik({ type: "onbekend_modeldocument", waarde: id });
    return NextResponse.json(
      { fout: `Onbekend modeldocument "${id}" — zie /api/modeldocumenten voor de lijst.` },
      { status: 404 }
    );
  }
  const tekst = stelModelSamen(model, seedOnderdelen);
  const zoekParams = new URL(request.url).searchParams;

  const basis = {
    id: model.id,
    titel: model.titel,
    akteType: model.akteType,
    omschrijving: model.omschrijving,
    versie: model.versie,
    datum: model.datum,
    taal: model.taal ?? "nl",
    bron: model.bron ?? null,
    parameters: beschrijfParametersVoorModel(extraheerParameters(tekst), model, seedOnderdelen),
    structuur: model.structuur.map((s) => ({
      onderdeelId: s.onderdeelId,
      titel: seedOnderdelen.find((o) => o.id === s.onderdeelId)?.titel ?? null,
      verplicht: s.verplicht,
      conditie: s.conditie ?? null,
    })),
    tekst,
  };

  const {
    ontwerp,
    opgenomenFacultatief,
    genegeerdFacultatief,
    genegeerdeParameters,
    heeftInvulparams,
    heeftFacultatiefParam,
  } = await ontwerpUitQuery(model, zoekParams);

  // Genereren we een ingevuld ontwerp? Enkel zodra er invulwaarden of een
  // facultatief-keuze zijn meegegeven; anders blijft het gedrag identiek.
  if (!heeftInvulparams && !heeftFacultatiefParam) {
    return NextResponse.json(basis);
  }

  return NextResponse.json({
    ...basis,
    ontwerp: verwijderOpmaakMarkers(ontwerp),
    opgenomenFacultatief,
    genegeerdFacultatief,
    // Typfout-feedback: aangeleverde invulwaarden zonder {{parameter}} in het
    // model — controleer de parameternaam (zie 'parameters' hierboven).
    genegeerdeParameters,
    disclaimer:
      "Werkdocument: hypotheses moeten nog gekozen en niet-ingevulde " +
      "parameters ([AAN TE VULLEN: …]) aangevuld worden. De notaris leest na " +
      "en valideert.",
  });
}
