import { NextRequest, NextResponse } from "next/server";
import { db } from "@/lib/db";
import { requirePageRole } from "@/lib/auth";
import { handleApiError } from "@/lib/api-helpers";

/**
 * فرز طلبة الصفوف حسب الشعب:
 * - ?grade=CODE  → تفاصيل صف واحد: مجموع طلبة + تقسيمهم على الشعب بأسمائهم
 * - ?grade=all   → عدد الطلبة النشطين في كل صف (لتظهر على بطاقات الصفوف)
 */
export async function GET(req: NextRequest) {
  try {
    await requirePageRole("classes", "ADMIN", "ACCOUNTANT", "STAFF");
    const { searchParams } = new URL(req.url);
    const grade = searchParams.get("grade")?.trim() ?? "";

    if (grade === "all") {
      const rows = await db.student.groupBy({
        by: ["grade"],
        where: { isActive: true },
        _count: { _all: true },
      });
      const counts: Record<string, number> = {};
      for (const r of rows) counts[r.grade] = r._count._all;
      return NextResponse.json({ counts });
    }

    if (!grade) {
      return NextResponse.json({ error: "كود الصف مطلوب" }, { status: 400 });
    }

    const students = await db.student.findMany({
      where: { grade, isActive: true },
      orderBy: [{ classroom: "asc" }, { nameAr: "asc" }],
      select: { id: true, nameAr: true, studentCode: true, classroom: true },
    });

    const sectionMap = new Map<string, { id: string; nameAr: string; studentCode: string }[]>();
    for (const s of students) {
      const list = sectionMap.get(s.classroom) ?? [];
      list.push({ id: s.id, nameAr: s.nameAr, studentCode: s.studentCode });
      sectionMap.set(s.classroom, list);
    }

    const sections = [...sectionMap.entries()]
      .sort((a, b) => a[0].localeCompare(b[0], "ar"))
      .map(([classroom, list]) => ({ classroom, count: list.length, students: list }));

    return NextResponse.json({
      grade,
      total: students.length,
      sectionsCount: sections.length,
      sections,
    });
  } catch (err) {
    return handleApiError(err);
  }
}
