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

/** Add a member to a committee: { committeeId, staffId? | memberName?, memberDesignation?, role }. */
export async function POST(req: Request) {
  const session = await requireRole("INSTITUTION_ADMIN");
  if (!session || !session.institutionId) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }
  try {
    const body = await req.json();
    const committeeId = Number(body.committeeId);
    if (!committeeId) return NextResponse.json({ error: "Missing fields" }, { status: 400 });

    const committee = await prisma.committee.findFirst({
      where: { id: committeeId, institutionId: session.institutionId },
    });
    if (!committee) return NextResponse.json({ error: "Committee not found" }, { status: 404 });

    let staffId = null;
    let memberName = null;
    let memberDesignation = null;
    if (body.staffId) {
      const staff = await prisma.staff.findFirst({
        where: { id: Number(body.staffId), institutionId: session.institutionId, status: "ACTIVE" },
      });
      if (!staff) return NextResponse.json({ error: "Staff not found" }, { status: 404 });
      staffId = staff.id;
    } else {
      memberName = String(body.memberName ?? "").trim();
      memberDesignation = String(body.memberDesignation ?? "").trim() || null;
      if (!memberName) return NextResponse.json({ error: "Missing fields" }, { status: 400 });
    }

    const member = await prisma.committeeMember.create({
      data: {
        institutionId: session.institutionId,
        committeeId,
        staffId,
        memberName,
        memberDesignation,
        role: COMMITTEE_ROLES.includes(body.role as never) ? body.role : "MEMBER",
        joinedDate: new Date(),
      },
    });
    return NextResponse.json({ member });
  } catch {
    return NextResponse.json({ error: "Could not add member" }, { status: 500 });
  }
}
