// ── API: gegenereerd .docx-bestand downloaden via een kortlevende link ───────
// Tegenhanger van lib/word/bestandenCache.ts: geeft het bestand terug als ruwe
// binaire HTTP-body (geen JSON/base64), zodat een chatomgeving die geen
// base64 kan verwerken (bv. Copilot Studio) het bestand alsnog als
// downloadbare bijlage kan aanbieden — de agent deelt gewoon de link.

import { NextResponse } from "next/server";
import { haalBestand } from "@/lib/word/bestandenCache";

export async function GET(
  _request: Request,
  { params }: { params: Promise<{ token: string }> }
) {
  const { token } = await params;
  const bestand = await haalBestand(token);
  if (!bestand) {
    return NextResponse.json(
      { fout: "Onbekende of verlopen downloadlink — genereer het bestand opnieuw." },
      { status: 404 }
    );
  }

  // HTTP-headers zijn Latin-1: een bestandsnaam met bv. een em-dash ("—",
  // U+2014, komt voor in modeltitels) laat de Response-constructor crashen
  // (ByteString). Daarom een ASCII-terugval in `filename=` en de volledige
  // UTF-8-naam in `filename*=` (RFC 6266/5987) — browsers gebruiken de laatste.
  const asciiNaam = bestand.bestandsnaam.replace(/[^\x20-\x7E]/g, "_");
  return new NextResponse(new Uint8Array(bestand.buffer), {
    status: 200,
    headers: {
      "Content-Type": bestand.mimeType,
      "Content-Disposition": `attachment; filename="${asciiNaam}"; filename*=UTF-8''${encodeURIComponent(bestand.bestandsnaam)}`,
    },
  });
}
