/**
 * 权限配置文件
 * 用于配置特定页面的访问权限
 */

/**
 * 权限配置接口
 */
export interface PermissionConfig {
  /** 路由路径 */
  path: string;
  /** 允许访问的用户名列表 */
  allowedUsers: string[];
  /** 权限描述 */
  description?: string;
}

/**
 * 页面权限配置列表
 * 在这里配置需要特殊权限控制的页面
 */
export const PAGE_PERMISSIONS: PermissionConfig[] = [
  {
    path: '/console/channel',
    allowedUsers: ['cc', 'Guo'],
    description: '号池管理页面 - 仅限cc和Guo用户访问',
  },
  {
    path: '/console/system-statistics',
    allowedUsers: ['cc', 'Guo'],
    description: '系统统计页面 - 仅限cc和Guo用户访问',
  },
  {
    path: '/console/announcement',
    allowedUsers: ['cc', 'Guo'],
    description: '公告管理页面 - 仅限cc和Guo用户访问',
  },
  // 可以在这里继续添加其他需要权限控制的页面
  // {
  //   path: '/console/admin',
  //   allowedUsers: ['admin', 'superadmin'],
  //   description: '管理员页面',
  // },
];

/**
 * 检查用户是否有权限访问指定路径
 * @param path 路由路径
 * @param userName 用户名
 * @returns 是否有权限
 */
export function checkPagePermission(path: string, userName: string | undefined): boolean {
  // 如果没有用户名，返回false
  if (!userName) {
    return false;
  }

  // 查找该路径的权限配置
  const permissionConfig = PAGE_PERMISSIONS.find(config => config.path === path);

  // 如果没有配置权限，说明该页面不需要特殊权限，返回true
  if (!permissionConfig) {
    return true;
  }

  // 检查用户名是否在允许列表中（不区分大小写）
  return permissionConfig.allowedUsers.some(
    allowedUser => allowedUser.toLowerCase() === userName.toLowerCase(),
  );
}

/**
 * 获取用户无权访问的路由列表
 * @param userName 用户名
 * @returns 无权访问的路由路径数组
 */
export function getRestrictedRoutes(userName: string | undefined): string[] {
  if (!userName) {
    return PAGE_PERMISSIONS.map(config => config.path);
  }

  return PAGE_PERMISSIONS.filter(
    config => !config.allowedUsers.some(
      allowedUser => allowedUser.toLowerCase() === userName.toLowerCase(),
    ),
  ).map(config => config.path);
}

/**
 * 检查路由是否需要权限控制
 * @param path 路由路径
 * @returns 是否需要权限控制
 */
export function isRestrictedRoute(path: string): boolean {
  return PAGE_PERMISSIONS.some(config => config.path === path);
}

/**
 * 过滤菜单路由，移除用户无权访问的菜单项
 * @param routes 路由配置数组
 * @param userName 用户名
 * @returns 过滤后的路由配置数组
 */
export function filterMenuRoutes(routes: any[], userName: string | undefined): any[] {
  return routes.filter((route) => {
    // 检查当前路由是否有权限
    const hasPermission = checkPagePermission(route.path, userName);

    if (!hasPermission) {
      return false;
    }

    // 如果有子路由，递归过滤
    if (route.children && route.children.length > 0) {
      route.children = filterMenuRoutes(route.children, userName);
    }

    return true;
  });
}
