import { Role } from "@/types/api";

// Route access configuration - easily updatable
export const ROUTE_PERMISSIONS: Record<string, Role[]> = {
  "/": [], // Home - accessible to all authenticated users
  "/registrations": [Role.SUPER_ADMIN, Role.DB_ADMIN, Role.ACCOUNT_ADMIN, Role.PRADESH_ADMIN, Role.MANDAL_ADMIN, Role.KARYAKARTA], // Registrations list
  "/register": [Role.SUPER_ADMIN, Role.DB_ADMIN, Role.PRADESH_ADMIN, Role.MANDAL_ADMIN, Role.KARYAKARTA], // Create registration
  "/payment": [Role.SUPER_ADMIN, Role.DB_ADMIN, Role.PRADESH_ADMIN, Role.MANDAL_ADMIN, Role.KARYAKARTA], // Payment page
  "/cashflow": [Role.SUPER_ADMIN, Role.DB_ADMIN, Role.KARYAKARTA, Role.PRADESH_ADMIN],
  "/analytics": [Role.SUPER_ADMIN, Role.DB_ADMIN, Role.PRADESH_ADMIN, Role.MANDAL_ADMIN],
  "/admin-panel": [Role.SUPER_ADMIN, Role.DB_ADMIN],
  "/admin-panel/otp": [Role.SUPER_ADMIN, Role.DB_ADMIN],
  "/admin-panel/otp/registration": [Role.SUPER_ADMIN, Role.DB_ADMIN],
  "/admin-panel/otp/reset-password": [Role.SUPER_ADMIN, Role.DB_ADMIN],
  "/admin-panel/karyakarta-data": [Role.SUPER_ADMIN, Role.DB_ADMIN, Role.ACCOUNT_ADMIN, Role.PRADESH_ADMIN],
  "/forms/mandal-level-karyakarta": [Role.PRADESH_ADMIN],
  "/admin-panel/recent-transactions": [Role.SUPER_ADMIN, Role.DB_ADMIN, Role.ACCOUNT_ADMIN],
  "/admin-panel/online-transactions": [Role.SUPER_ADMIN, Role.DB_ADMIN, Role.ACCOUNT_ADMIN],
  "/admin-panel/cash-on-hand": [Role.SUPER_ADMIN, Role.DB_ADMIN, Role.ACCOUNT_ADMIN, Role.PRADESH_ADMIN],
  "/db-editor": [Role.DB_ADMIN],
  // Add more routes here as needed
};

// Check if a role has access to a route
export function hasAccess(userRole: Role, route: string): boolean {
  const allowedRoles = ROUTE_PERMISSIONS[route];
  
  // If route not in config, allow access by default
  if (!allowedRoles) return true;
  
  return allowedRoles.includes(userRole);
}

// Get minimum required role for a route
export function getMinimumRole(route: string): Role | null {
  const allowedRoles = ROUTE_PERMISSIONS[route];
  if (!allowedRoles || allowedRoles.length === 0) return null;
  
  // Return the lowest privilege role that has access
  const roleHierarchy = [Role.PERSONAL, Role.KARYAKARTA, Role.MANDAL_ADMIN, Role.PRADESH_ADMIN, Role.ACCOUNT_ADMIN, Role.DB_ADMIN, Role.SUPER_ADMIN];
  
  for (const role of roleHierarchy) {
    if (allowedRoles.includes(role)) {
      return role;
    }
  }
  
  return null;
}

// Check if user role is at least the minimum required
export function meetsMinimumRole(userRole: Role, minimumRole: Role): boolean {
  const roleHierarchy = [Role.PERSONAL, Role.KARYAKARTA, Role.MANDAL_ADMIN, Role.PRADESH_ADMIN, Role.ACCOUNT_ADMIN, Role.DB_ADMIN, Role.SUPER_ADMIN];
  
  const userRoleIndex = roleHierarchy.indexOf(userRole);
  const minimumRoleIndex = roleHierarchy.indexOf(minimumRole);
  
  return userRoleIndex >= minimumRoleIndex;
}
