import { prisma } from "@pmap/database";
import { NextResponse } from "next/server";
import { getAdminSessionFromRequest } from "../../../../../../auth";
import { fail } from "../../../../_lib";
import { createQrSvg } from "../../_qr";

export async function GET(request: Request, { params }: { params: Promise<{ id: string }> }) {
  try {
    if (!await getAdminSessionFromRequest(request)) return fail(request, "UNAUTHORIZED", "Admin login is required.", 401);
    const { id } = await params;
    const participant = await prisma.participantProfile.findUnique({
      where: { id },
      include: {
        qrCredentials: {
          where: { isActive: true, revokedAt: null },
          orderBy: { issuedAt: "desc" },
          take: 1
        }
      }
    });

    const credential = participant?.qrCredentials[0];
    if (!participant || !credential) return fail(request, "QR_NOT_READY", "This participant does not have an issued QR credential.", 404);

    const svg = await createQrSvg(participant, credential);
    const filename = `${participant.registrationReference}-qr.svg`;
    const isPreview = new URL(request.url).searchParams.get("preview") === "1";
    return new NextResponse(svg, {
      headers: {
        "Content-Type": "image/svg+xml; charset=utf-8",
        "Content-Disposition": `${isPreview ? "inline" : "attachment"}; filename="${filename}"`
      }
    });
  } catch (error) {
    return fail(request, "QR_DOWNLOAD_FAILED", "QR code could not be generated.", 500, error instanceof Error ? error.message : error);
  }
}
