import { useMemo } from "react";
import { useGetPermissions } from "@/pages/roles/hooks/useRolesData";
import {
  hasPermission,
  hasAnyPermission,
  hasAllPermissions,
} from "@/helpers/permissions";

/**
 * Custom hook for managing user permissions
 * @returns Object with permissions data and helper functions
 */
export const usePermissions = () => {
  const { data: permissionsResponse, isLoading, error } = useGetPermissions();

  const permissions = useMemo(() => {
    return permissionsResponse?.data || [];
  }, [permissionsResponse]);

  /**
   * Checks if user has a specific permission
   */
  const checkPermission = (permissionName: string): boolean => {
    return hasPermission(permissions, permissionName);
  };

  /**
   * Checks if user has any of the specified permissions
   */
  const checkAnyPermission = (permissionNames: string[]): boolean => {
    return hasAnyPermission(permissions, permissionNames);
  };

  /**
   * Checks if user has all of the specified permissions
   */
  const checkAllPermissions = (permissionNames: string[]): boolean => {
    return hasAllPermissions(permissions, permissionNames);
  };

  return {
    permissions,
    isLoading,
    error,
    checkPermission,
    checkAnyPermission,
    checkAllPermissions,
    hasPermission: checkPermission,
  };
};
