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

type Params = { params: Promise<{ id: string }> };

/** Reply to a ticket: { message }.
    Replying to a RESOLVED ticket reopens it; CLOSED tickets stay closed. */
export async function POST(req: Request, { params }: Params) {
  const session = await requireRole("INSTITUTION_ADMIN");
  if (!session || !session.institutionId) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

  const { id } = await params;
  const ticket = await prisma.supportTicket.findFirst({
    where: { id: Number(id), institutionId: session.institutionId },
    select: { id: true, status: true },
  });
  if (!ticket) return NextResponse.json({ error: "Not found" }, { status: 404 });
  if (ticket.status === "CLOSED") {
    return NextResponse.json({ error: "TICKET_CLOSED" }, { status: 409 });
  }

  try {
    const body = await req.json();
    const message = String(body.message ?? "").trim();
    if (!message) return NextResponse.json({ error: "Missing fields" }, { status: 400 });

    const created = await prisma.supportTicketMessage.create({
      data: {
        ticketId: ticket.id,
        senderRole: "INSTITUTION_ADMIN",
        senderName: session.name,
        message,
      },
    });
    // a fresh reply from the institution reopens a resolved ticket
    if (ticket.status === "RESOLVED") {
      await prisma.supportTicket.update({ where: { id: ticket.id }, data: { status: "OPEN" } });
    }
    return NextResponse.json({ message: created });
  } catch {
    return NextResponse.json({ error: "Could not send reply" }, { status: 500 });
  }
}
