import { insertLogs } from "../../../gcloud.js";
import { getBanList, setBanList } from "../../../roblox-open-cloud.js";

export async function onRequestPost(context: RequestContext) {
  const actionMap = context.data.body;
  const newActions: { [k: string]: { BanType: number } } = {};
  const logMap: { [k: string]: number } = {};

  for (const [user, action] of Object.entries(actionMap)) {
    if (
      isNaN(parseInt(user)) ||
      typeof action !== "number" ||
      action < 0 ||
      action > 2
    )
      return new Response('{"error":"Invalid action map"}', {
        headers: {
          "content-type": "application/json",
        },
      });

    if (action === 0) continue;

    Object.defineProperty(newActions, user, {
      value: {
        BanType: action,
      },
    });

    Object.defineProperty(logMap, user, {
      value: action,
    });
  }

  await insertLogs(logMap, context.params.id as string, context);

  const banList = (await getBanList(context)) as {
    [k: string]: { BanType: number };
  };

  Object.assign(banList, newActions);
  await setBanList(context, banList);

  return new Response(null, {
    status: 204,
  });
}