import { NextResponse } from "next/server";

import { requirePermission } from "@/lib/authorization";
import {
  DocumentTemplateError,
  previewDocumentTemplate,
} from "@/services/modeles-documents.service";

export const runtime = "nodejs";

export async function GET(request: Request) {
  const auth = await requirePermission(request, "impressions", "write");
  if (!auth.ok) return auth.response;

  const url = new URL(request.url);
  const templateId = Number(url.searchParams.get("templateId"));
  const version = Number(url.searchParams.get("version"));
  if (!Number.isInteger(templateId) || templateId <= 0 || !Number.isInteger(version) || version <= 0) {
    return NextResponse.json({ message: "INVALID_QUERY" }, { status: 400 });
  }

  try {
    const pdf = await previewDocumentTemplate(templateId, version);
    return new NextResponse(new Uint8Array(pdf), {
      headers: {
        "Content-Type": "application/pdf",
        "Content-Disposition": "inline; filename=apercu-modele.pdf",
        "Cache-Control": "private, no-store",
      },
    });
  } catch (error) {
    if (error instanceof DocumentTemplateError) {
      return NextResponse.json({ message: error.code }, { status: 404 });
    }
    console.error("Document template preview failed", error);
    return NextResponse.json({ message: "PREVIEW_FAILED" }, { status: 500 });
  }
}
