import { NextRequest } from "next/server";
import { Role } from "@prisma/client";
import { z } from "zod";
import { prisma } from "@/server/db";
import { fail, ok, parseJson } from "@/server/http";
import { requireUser } from "@/server/security/auth";
import { requireRole } from "@/server/security/rbac";
import { getSupportAvailability } from "@/server/support/schedule";

const schema = z.object({
  liveChatOnline: z.boolean(),
  message: z.string().trim().max(160).optional()
});

export const dynamic = "force-dynamic";

export async function PATCH(request: NextRequest) {
  try {
    const auth = await requireUser(request);
    requireRole(auth.roles, [Role.SUPPORT, Role.ADMIN, Role.SUPER_ADMIN]);
    const input = await parseJson(request, schema);
    await prisma.supportAvailability.upsert({
      where: { id: "default" },
      create: {
        id: "default",
        isLiveChatOnline: input.liveChatOnline,
        message: input.message,
        updatedById: auth.user.id
      },
      update: {
        isLiveChatOnline: input.liveChatOnline,
        message: input.message,
        updatedById: auth.user.id
      }
    });

    return ok(await getSupportAvailability());
  } catch (error) {
    return fail(error);
  }
}
