import { NextResponse } from "next/server";
import { prisma } from "@/lib/prisma";
import { requireRole } from "@/lib/auth";

type Params = { params: Promise<{ id: string }> };

/** Broadcast detail with its per-recipient delivery log. */
export async function GET(_req: Request, { params }: Params) {
  const session = await requireRole("INSTITUTION_ADMIN");
  if (!session || !session.institutionId) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }
  const { id } = await params;

  const broadcast = await prisma.broadcast.findFirst({
    where: { id: Number(id), institutionId: session.institutionId },
    include: {
      classItem: { select: { name: true, nameBn: true } },
      student: { select: { name: true, guardianName: true } },
      staff: { select: { name: true } },
      sentBy: { select: { name: true } },
      recipients: { orderBy: { id: "asc" } },
    },
  });
  if (!broadcast) return NextResponse.json({ error: "Not found" }, { status: 404 });

  return NextResponse.json({
    broadcast: {
      id: broadcast.id,
      channels: broadcast.channels,
      audience: broadcast.audience,
      className: broadcast.classItem?.name ?? null,
      studentName: broadcast.student?.guardianName ?? broadcast.student?.name ?? null,
      staffName: broadcast.staff?.name ?? null,
      subject: broadcast.subject,
      body: broadcast.body,
      status: broadcast.status,
      sentBy: broadcast.sentBy?.name ?? null,
      createdAt: broadcast.createdAt,
      recipients: broadcast.recipients.map((r) => ({
        id: r.id,
        name: r.name,
        phone: r.phone,
        email: r.email,
      })),
    },
  });
}
