import { NextRequest } from "next/server";
import { Role } from "@prisma/client";
import { prisma } from "@/server/db";
import { fail, ok } from "@/server/http";
import { requireUser } from "@/server/security/auth";
import { requireRole } from "@/server/security/rbac";
import { liveChatConversationInclude, supportTicketInclude } from "@/server/support/includes";
import { getSupportAvailability } from "@/server/support/schedule";
import { serializeLiveChatConversation, serializeSupportTicket } from "@/server/support/serializers";

export const dynamic = "force-dynamic";

export async function GET(request: NextRequest) {
  try {
    const auth = await requireUser(request);
    requireRole(auth.roles, [Role.SUPPORT, Role.ADMIN, Role.SUPER_ADMIN]);
    const [availability, tickets, conversations] = await Promise.all([
      getSupportAvailability(),
      prisma.supportTicket.findMany({
        include: supportTicketInclude(),
        orderBy: { lastMessageAt: "desc" },
        take: 80
      }),
      prisma.liveChatConversation.findMany({
        include: liveChatConversationInclude(),
        orderBy: { lastMessageAt: "desc" },
        take: 80
      })
    ]);

    return ok({
      availability,
      tickets: tickets.map(serializeSupportTicket),
      conversations: conversations.map(serializeLiveChatConversation)
    });
  } catch (error) {
    return fail(error);
  }
}
