/**
 * 基于权限过滤导航项的 Hook
 */

import { useMemo } from 'react';
import { NavItem, SubNavItem } from '@/config/navigation';
import { usePermissions } from './usePermissions';

export function useFilteredNavigation(navItems: NavItem[]): NavItem[] {
  const { hasAnyPermission, hasAnyRole, isAdmin, loading } = usePermissions();

  return useMemo(() => {
    if (loading) {
      // 权限加载中，返回空数组
      if (process.env.NODE_ENV === 'development') {
        console.log('[useFilteredNavigation] Loading permissions...');
      }
      return [];
    }

    // 调试：输出权限状态
    if (process.env.NODE_ENV === 'development') {
      console.log('[useFilteredNavigation] isAdmin:', isAdmin);
      console.log('[useFilteredNavigation] Total nav items:', navItems.length);
    }

    // 管理员可以看到所有导航项
    if (isAdmin) {
      return navItems;
    }

    // 检查单个子菜单项是否有权限访问
    const hasAccessToSubItem = (subItem: SubNavItem): boolean => {
      // 如果没有配置权限和角色要求，默认允许访问
      if (
        (!subItem.permissions || subItem.permissions.length === 0) &&
        (!subItem.roles || subItem.roles.length === 0)
      ) {
        return true;
      }

      // 检查权限
      if (subItem.permissions && subItem.permissions.length > 0) {
        if (hasAnyPermission(subItem.permissions)) {
          return true;
        }
      }

      // 检查角色
      if (subItem.roles && subItem.roles.length > 0) {
        if (hasAnyRole(subItem.roles)) {
          return true;
        }
      }

      return false;
    };

    // 检查导航项是否有权限访问
    const hasAccessToNavItem = (item: NavItem): boolean => {
      // 如果有子菜单，只要有一个子菜单有权限，父菜单就有权限
      if (item.subItems && item.subItems.length > 0) {
        return item.subItems.some(hasAccessToSubItem);
      }

      // 如果没有配置权限和角色要求，默认允许访问
      if (
        (!item.permissions || item.permissions.length === 0) &&
        (!item.roles || item.roles.length === 0)
      ) {
        return true;
      }

      // 检查权限
      if (item.permissions && item.permissions.length > 0) {
        if (hasAnyPermission(item.permissions)) {
          return true;
        }
      }

      // 检查角色
      if (item.roles && item.roles.length > 0) {
        if (hasAnyRole(item.roles)) {
          return true;
        }
      }

      return false;
    };

    // 过滤导航项
    const filteredNavItems = navItems
      .filter((item) => {
        const hasAccess = hasAccessToNavItem(item);
        // 调试：输出每个导航项的权限检查结果
        if (process.env.NODE_ENV === 'development') {
          console.log(`[useFilteredNavigation] ${item.name} (${item.path}):`, {
            hasAccess,
            requiredPermissions: item.permissions,
            requiredRoles: item.roles,
          });
        }
        return hasAccess;
      })
      .map((item) => {
        // 如果有子菜单，过滤子菜单
        if (item.subItems && item.subItems.length > 0) {
          const filteredSubItems = item.subItems.filter(hasAccessToSubItem);
          return {
            ...item,
            subItems: filteredSubItems,
          };
        }
        return item;
      });

    // 调试：输出过滤后的导航项
    if (process.env.NODE_ENV === 'development') {
      console.log('[useFilteredNavigation] Filtered nav items:', filteredNavItems.map(i => i.name));
    }

    return filteredNavItems;
  }, [navItems, hasAnyPermission, hasAnyRole, isAdmin, loading]);
}

