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

/** Subscription + payment history for the logged-in institution. */
export async function GET() {
  const session = await requireRole("INSTITUTION_ADMIN");
  if (!session || !session.institutionId) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

  const [subscription, payments] = await Promise.all([
    prisma.subscription.findFirst({
      where: { institutionId: session.institutionId },
      orderBy: { createdAt: "desc" },
      include: { packagePlan: { select: { name: true, nameBn: true, durationMonths: true } } },
    }),
    prisma.payment.findMany({
      where: { institutionId: session.institutionId },
      orderBy: { paidAt: "desc" },
    }),
  ]);

  const totalAmount = subscription ? Number(subscription.totalAmount) : 0;
  const paid = payments.reduce((sum, p) => sum + Number(p.amount), 0);

  return NextResponse.json({
    subscription: subscription
      ? {
          id: subscription.id,
          planName: subscription.packagePlan?.name ?? (subscription.studentRange ? `${subscription.studentRange} Students` : "IncrelogEMS Package"),
          planNameBn: subscription.packagePlan?.nameBn ?? (subscription.studentRange ? `${subscription.studentRange} শিক্ষার্থী` : "ইনক্রিলগইএমএস প্যাকেজ"),
          startDate: subscription.startDate,
          endDate: subscription.endDate,
          status: subscription.status,
          totalAmount,
          paid,
          due: Math.max(0, totalAmount - paid),
        }
      : null,
    payments,
  });
}
