// ── API: één modelbrief, opvragen en invullen ────────────────────────────────
// Zonder queryparameters: het sjabloon (onderwerp/tekst met {{parameters}}),
// de in te vullen parameters en de keuzbare varianten. Met queryparameters
// (parameternaam=waarde per parameter, en optioneel varianten=id1,id2) wordt
// het ingevulde resultaat (onderwerp + tekst + bijlagen) meegegeven, klaar
// om in een e-mail te plakken.

import { NextResponse } from "next/server";
import {
  seedBrieven,
  briefCategorieLabels,
  briefTaalLabels,
  verzamelParameterNamen,
  vulModelbriefIn,
} from "@/data/modelbrieven";
import { registreerGebruik } from "@/lib/gebruikslog";

export async function GET(
  request: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  const { id } = await params;
  const brief = seedBrieven.find((b) => b.id === id);
  if (!brief) {
    await registreerGebruik({ type: "onbekende_modelbrief", waarde: id });
    return NextResponse.json(
      { fout: `Onbekende modelbrief "${id}" — zie /api/modelbrieven voor de lijst.` },
      { status: 404 }
    );
  }

  const zoekParams = new URL(request.url).searchParams;
  const variantenParam = zoekParams.get("varianten");
  const variantIds = variantenParam === null
    ? undefined
    : variantenParam.split(",").map((v) => v.trim()).filter(Boolean);

  const waarden: Record<string, string> = {};
  for (const [key, waarde] of zoekParams.entries()) {
    if (key === "varianten") continue;
    waarden[key] = waarde;
  }

  const ingevuld = vulModelbriefIn(brief, waarden, variantIds);

  return NextResponse.json({
    id: brief.id,
    titel: brief.titel,
    categorie: briefCategorieLabels[brief.categorie],
    ontvanger: brief.ontvanger,
    taal: briefTaalLabels[brief.taal],
    vertalingVanId: brief.vertalingVanId ?? null,
    versie: brief.versie,
    datum: brief.datum,
    bron: brief.bron ?? null,
    sjabloon: { onderwerp: brief.onderwerp, tekst: brief.tekst, slot: brief.slot ?? null },
    parameters: verzamelParameterNamen(brief).map((naam) => ({
      naam,
      omschrijving: brief.parameters.find((p) => p.naam === naam)?.omschrijving ?? null,
      voorbeeld: brief.parameters.find((p) => p.naam === naam)?.voorbeeld ?? null,
    })),
    varianten: brief.varianten.map((v) => ({
      id: v.id,
      hypothese: v.hypothese,
      tekst: v.tekst,
      geselecteerd: variantIds ? variantIds.includes(v.id) : true,
    })),
    ingevuld,
  });
}
