// Tipos e enums para sistema de autenticação e autorização

/**
 * Enum para os níveis de acesso do usuário
 */
export enum UserRole {
  SUPERADMIN = "superadmin",
  ADMIN = "admin",
  COLABORADOR = "colaborador",
  ENTREGADOR = "entregador",
}

/**
 * Interface para dados do usuário com informações de role
 */
export interface UserData {
  $id: string;
  "nome-civil": string;
  "nome-social": string | null;
  cpf: string;
  email: string;
  nivel: UserRole;
  empresas?: any[];
  enderecos?: any[];
  $createdAt: string;
  $updatedAt: string;
  $permissions: string[];
  $databaseId: string;
  $collectionId: string;
}

/**
 * Interface para contexto de autenticação
 */
export interface AuthContextType {
  user: UserData | null;
  userRole: UserRole | null;
  loading: boolean;
  isAuthenticated: boolean;
  hasRole: (role: UserRole) => boolean;
  hasAnyRole: (roles: UserRole[]) => boolean;
  canAccess: (requiredRoles: UserRole[]) => boolean;
}

/**
 * Configuração de permissões por role
 */
export const ROLE_PERMISSIONS = {
  [UserRole.SUPERADMIN]: {
    canAccessUsers: true,
    canAccessAddresses: true,
    canAccessCompanies: true,
    canAccessDeliveries: true,
    canAccessDashboard: true,
    canAccessProducts: true,
    canAccessOrders: true,
    canAccessPayments: true,
    canAccessReports: true,
    canAccessLaboratories: true,
    canManageUsers: true,
    canManageCompanies: true,
  },
  [UserRole.ADMIN]: {
    canAccessUsers: false,
    canAccessAddresses: true,
    canAccessCompanies: false, // Só pode ver sua própria empresa
    canAccessDeliveries: true,
    canAccessDashboard: true,
    canAccessProducts: true,
    canAccessOrders: true,
    canAccessPayments: true,
    canAccessReports: true,
    canAccessLaboratories: true,
    canManageUsers: true, // Pode gerenciar colaboradores e entregadores
    canManageCompanies: false,
  },
  [UserRole.COLABORADOR]: {
    canAccessUsers: false,
    canAccessAddresses: false,
    canAccessCompanies: false,
    canAccessDeliveries: true,
    canAccessDashboard: true,
    canAccessProducts: true,
    canAccessOrders: true,
    canAccessPayments: false,
    canAccessReports: false,
    canAccessLaboratories: false,
    canManageUsers: false,
    canManageCompanies: false,
  },
  [UserRole.ENTREGADOR]: {
    canAccessUsers: false,
    canAccessAddresses: false,
    canAccessCompanies: false,
    canAccessDeliveries: true,
    canAccessDashboard: false,
    canAccessProducts: false,
    canAccessOrders: true, // Apenas visualizar pedidos para entrega
    canAccessPayments: false,
    canAccessReports: false,
    canAccessLaboratories: false,
    canManageUsers: false,
    canManageCompanies: false,
  },
} as const;

/**
 * Rotas permitidas por role
 */
export const ROLE_ROUTES = {
  [UserRole.SUPERADMIN]: [
    "/dashboard",
    "/usuarios",
    "/enderecos",
    "/empresas",
    "/entregas",
    "/produtos",
    "/pedidos",
    "/pagamentos",
    "/relatorios",
    "/laboratorios",
    "/perfil",
    "/gestao-usuarios",
  ],
  [UserRole.ADMIN]: [
    "/dashboard",
    "/entregas",
    "/produtos",
    "/pedidos",
    "/pagamentos",
    "/relatorios",
    "/laboratorios",
    "/perfil",
    "/gestao-usuarios",
  ],
  [UserRole.COLABORADOR]: [
    "/dashboard",
    "/entregas",
    "/produtos",
    "/pedidos",
    "/perfil",
  ],
  [UserRole.ENTREGADOR]: ["/entregas", "/pedidos", "/perfil"],
} as const;
