// ── API: ontwerptekst van een werkdossier-sessie — bekijken en bewerken ──────
// GET geeft de actuele ontwerptekst van de sessie terug (de rechtstreeks
// bewerkte versie, of de reconstructie uit de bewaarde invoer — zie
// lib/dossier/sessieOntwerp.ts), zodat de dossierpagina het document in een
// paneel kan visualiseren.
// POST bewaart een rechtstreeks bewerkte tekst op de sessie, rendert er
// meteen een nieuw .docx van en geeft de downloadlink terug — de kern van
// "aanpassen in het venster en de aangepaste versie downloaden".

import { NextResponse } from "next/server";
import { haalSessie, werkSessieBij } from "@/lib/dossier/werkdossierSessies";
import { ontwerptekstVanSessie } from "@/lib/dossier/sessieOntwerp";
import { genereerOntwerpWordDocument } from "@/lib/word/genereerOntwerpWordDocument";
import { leverWordBestand } from "@/lib/word/wordLevering";

// Rendert bij POST een nieuw .docx — zelfde ruime uitvoeringstijd
// (zie app/api/mcp/route.ts voor de volledige toelichting).
export const maxDuration = 60;

export async function GET(_request: Request, { params }: { params: Promise<{ token: string }> }) {
  const { token } = await params;
  const sessie = await haalSessie(token);
  if (!sessie) {
    return NextResponse.json({ fout: "Sessie niet gevonden of verlopen." }, { status: 404 });
  }
  const ontwerp = await ontwerptekstVanSessie(sessie);
  if (!ontwerp) {
    return NextResponse.json(
      { fout: "Voor deze sessie is geen tekstweergave beschikbaar — download het .docx via de sessielijst." },
      { status: 422 }
    );
  }
  return NextResponse.json(ontwerp);
}

export async function POST(request: Request, { params }: { params: Promise<{ token: string }> }) {
  const { token } = await params;
  const sessie = await haalSessie(token);
  if (!sessie) {
    return NextResponse.json({ fout: "Sessie niet gevonden of verlopen." }, { status: 404 });
  }

  let body: Record<string, unknown>;
  try {
    body = (await request.json()) as Record<string, unknown>;
  } catch {
    return NextResponse.json({ fout: "Verwacht een JSON-body ({ tekst, wijziging? })." }, { status: 400 });
  }
  const tekst = typeof body.tekst === "string" ? body.tekst : "";
  if (!tekst.trim()) {
    return NextResponse.json({ fout: 'Veld "tekst" (de bewerkte ontwerptekst) is vereist en mag niet leeg zijn.' }, { status: 400 });
  }
  const wijziging =
    typeof body.wijziging === "string" && body.wijziging.trim()
      ? body.wijziging.trim()
      : "Tekst rechtstreeks bewerkt in het dossierpaneel";

  // Taal van het document volgt het model van de sessie (zelfde afleiding als GET).
  const huidige = await ontwerptekstVanSessie(sessie);
  const taal = huidige?.taal ?? "nl";

  const buffer = await genereerOntwerpWordDocument(tekst, taal);
  const levering = await leverWordBestand(buffer, sessie.bestandsnaam, request);

  // De generatie-index van déze bewerking = de index die haar historiek-item
  // zo meteen krijgt (werkSessieBij voegt het toe) — zie sessieOntwerp.ts.
  await werkSessieBij(
    sessie,
    { ...sessie.invoer, aangepasteTekst: tekst, aangepasteTekstGeneratieIndex: sessie.historiek.length },
    levering,
    wijziging
  );

  return NextResponse.json({
    token: sessie.token,
    bestandsnaam: levering.bestandsnaam,
    downloadUrl: levering.downloadUrl,
    toegepasteWijziging: wijziging,
  });
}
