import { prisma } from "../src/constants";
await (async () => {
  const userIdentifier = Bun.argv[2];
  const roleIdentifier = Bun.argv[3];

  if (Bun.argv.length !== 4)
    console.error(
      "2 arguments expected. \n Format: bun utils:assign_user_role {user} {role}"
    );

  const user = await prisma.user.findFirst({
    where: { OR: [{ id: userIdentifier }, { login: userIdentifier }] },
  });

  if (!user)
    return console.error(
      `User with identifier '${userIdentifier}' doesn't exist`
    );

  const role = await prisma.role.findFirst({
    where: { OR: [{ id: roleIdentifier }, { moniker: roleIdentifier }] },
    include: { users: true },
  });

  if (!role)
    return console.error(
      `Role with identifier '${roleIdentifier}' doesn't exist`
    );

  if (role.users.map((v) => v.id).includes(user.id))
    return console.log("User already has role!");

  await prisma.user.update({
    where: { id: user.id },
    data: { roles: { set: { id: role.id } } },
  });

  return console.log(
    `User '${user.login}' has been given role '${role.title}'!`
  );
})();
