import type { PermissionType } from '@/pages/roles/types/Types';

/**
 * Checks if user has a specific permission
 * @param permissions - Array of user permissions
 * @param permissionName - Name of the permission to check
 * @returns boolean indicating if user has the permission
 */
export const hasPermission = (
  permissions: PermissionType[] | undefined,
  permissionName: string
): boolean => {
  if (!permissions || permissions.length === 0) {
    return false;
  }

  return permissions.some(
    (permission) => permission.name === permissionName
  );
};

/**
 * Checks if user has any of the specified permissions
 * @param permissions - Array of user permissions
 * @param permissionNames - Array of permission names to check
 * @returns boolean indicating if user has at least one of the permissions
 */
export const hasAnyPermission = (
  permissions: PermissionType[] | undefined,
  permissionNames: string[]
): boolean => {
  if (!permissions || permissions.length === 0 || permissionNames.length === 0) {
    return false;
  }

  return permissionNames.some((permissionName) =>
    hasPermission(permissions, permissionName)
  );
};

/**
 * Checks if user has all of the specified permissions
 * @param permissions - Array of user permissions
 * @param permissionNames - Array of permission names to check
 * @returns boolean indicating if user has all of the permissions
 */
export const hasAllPermissions = (
  permissions: PermissionType[] | undefined,
  permissionNames: string[]
): boolean => {
  if (!permissions || permissions.length === 0 || permissionNames.length === 0) {
    return false;
  }

  return permissionNames.every((permissionName) =>
    hasPermission(permissions, permissionName)
  );
};

