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

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

/** Students eligible for an exam: ACTIVE students of the exam's institution
    matching its class / section / group (an exam's shift is the sitting time,
    not a student cohort, so it does not filter). */
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 exam = await prisma.exam.findFirst({
    where: { id: Number(id), OR: [{ institutionId: session.institutionId }, { branchId: session.institutionId }] },
    select: {
      institutionId: true,
      classItemId: true,
      sectionItemId: true,
      groupItemId: true,
    },
  });
  if (!exam) return NextResponse.json({ error: "Not found" }, { status: 404 });

  const students = await prisma.student.findMany({
    where: {
      institutionId: exam.institutionId,
      status: "ACTIVE",
      ...(exam.classItemId ? { classItemId: exam.classItemId } : {}),
      ...(exam.sectionItemId ? { sectionItemId: exam.sectionItemId } : {}),
      ...(exam.groupItemId ? { groupItemId: exam.groupItemId } : {}),
    },
    orderBy: { roll: "asc" },
    select: { id: true, roll: true, name: true, nameBn: true, photoUrl: true },
  });

  return NextResponse.json({ students });
}
