import { type } from "arktype";
import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
import aclManager from "~/server/internal/acls";
import prisma from "~/server/internal/db/database";

const GamePatch = type({
  action: "'developed' | 'published'",
  enabled: "boolean",
  id: "string",
}).configure(throwingArktype);

export default defineEventHandler(async (h3) => {
  const allowed = await aclManager.allowSystemACL(h3, ["company:update"]);
  if (!allowed) throw createError({ statusCode: 403 });

  const companyId = getRouterParam(h3, "id")!;

  const body = await readDropValidatedBody(h3, GamePatch);

  const action = body.action === "developed" ? "developers" : "publishers";
  const actionType = body.enabled ? "connect" : "disconnect";

  const game = await prisma.game.findUnique({ where: { id: body.id } });
  if (!game) throw createError({ statusCode: 404, message: "Game not found" });

  // Safe because we query the game above
  // eslint-disable-next-line drop/no-prisma-delete
  await prisma.game.update({
    where: {
      id: body.id,
    },
    data: {
      [action]: {
        [actionType]: {
          id: companyId,
        },
      },
    },
  });

  return;
});
