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

/** Available packages for the institution's education pattern + their own requests. */
export async function GET() {
  const session = await requireRole("INSTITUTION_ADMIN");
  if (!session || !session.institutionId) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

  const institution = await prisma.institution.findUnique({
    where: { id: session.institutionId },
    select: { type: true, status: true, isGovernment: true },
  });
  if (!institution) return NextResponse.json({ error: "Institution not found" }, { status: 404 });

  const eligible = patternsForInstitution(institution.type, institution.isGovernment);
  const patternIds = eligible.map((p) => p.id);

  const [plans, requests, studentCount, subscriptionCount] = await Promise.all([
    prisma.packagePlan.findMany({
      where: { educationPattern: { in: patternIds }, isActive: true },
      orderBy: { price: "asc" },
    }),
    prisma.packageRequest.findMany({
      where: { institutionId: session.institutionId },
      orderBy: { createdAt: "desc" },
      include: { packagePlan: { select: { name: true, nameBn: true, price: true } } },
    }),
    prisma.student.count({
      where: { institutionId: session.institutionId, status: "ACTIVE" },
    }),
    prisma.subscription.count({ where: { institutionId: session.institutionId } }),
  ]);

  return NextResponse.json({
    institutionStatus: institution.status,
    studentCount,
    hasSubscription: subscriptionCount > 0,
    plans,
    requests,
  });
}
