import { PermissionsMap } from "../models/permissions/map";

const calculate = (permissions: number[]) => {
  let total = 0x0;

  permissions.forEach((permission) => {
    const cumulative = 1 << permission;
    total |= cumulative;
  });

  return total;
};

const def = () => {
  const user = calculate([
    PermissionsMap.UPLOAD_PROJECT,
    PermissionsMap.DELETE_PROJECT,
    PermissionsMap.UPLOAD_FILES,
    PermissionsMap.EDIT_FILE,
  ]);

  const admin =
    user +
    calculate([
      PermissionsMap.VIEW_USER_LIST,
      PermissionsMap.CREATE_USER,
      PermissionsMap.VIEW_USER,
      PermissionsMap.UPDATE_USER,
      PermissionsMap.DELETE_USER,
    ]);

  return {
    user,
    admin,
  };
};

export {
  def as permissionDefinition,
  calculate as permissionsCalculation,
  PermissionsMap,
};
