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

/** Clubs the institution created (English Language Club, Debating Club…). */
export async function GET() {
  const session = await requireAnyRole(["INSTITUTION_ADMIN", "TEACHER", "STUDENT", "PARENT"]);
  if (!session || !session.institutionId) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

  const clubs = await prisma.club.findMany({
    where: { institutionId: session.institutionId },
    orderBy: { name: "asc" },
    include: { _count: { select: { competitions: true } } },
  });
  return NextResponse.json({ clubs });
}

export async function POST(req: Request) {
  const session = await requireAnyRole(["INSTITUTION_ADMIN"]);
  if (!session || !session.institutionId) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

  try {
    const body = await req.json();
    const name = String(body.name ?? "").trim();
    if (!name) return NextResponse.json({ error: "Name is required" }, { status: 400 });

    const exists = await prisma.club.findFirst({
      where: { institutionId: session.institutionId, name },
      select: { id: true },
    });
    if (exists) return NextResponse.json({ error: "CLUB_EXISTS" }, { status: 409 });

    const club = await prisma.club.create({
      data: {
        institutionId: session.institutionId,
        name,
        nameBn: String(body.nameBn ?? "").trim() || null,
        description: String(body.description ?? "").trim() || null,
      },
    });
    return NextResponse.json({ club });
  } catch {
    return NextResponse.json({ error: "Could not create club" }, { status: 500 });
  }
}

export async function DELETE(req: Request) {
  const session = await requireAnyRole(["INSTITUTION_ADMIN"]);
  if (!session || !session.institutionId) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }
  const id = Number(new URL(req.url).searchParams.get("id"));
  if (!id) return NextResponse.json({ error: "Missing id" }, { status: 400 });
  await prisma.club.deleteMany({ where: { id, institutionId: session.institutionId } });
  return NextResponse.json({ ok: true });
}
