import routerConfig from '@/router/routes';
import { getLocaleByPath } from '@/router/titles';
import type { AppRouteObject } from '@/router/types';

export interface NavMenuItem {
    name: string;
    path: string;
    locale?: string;
}

/**
 * 处理单个路由项，如果符合条件则添加到菜单项数组
 * @param route 路由对象
 * @param items 菜单项数组
 */
function processRouteItem(route: AppRouteObject, items: NavMenuItem[]): void {
    // 跳过 index 路由
    if (route.index) {
        return;
    }

    // 检查是否应该在菜单中显示
    if (route.hideInMenu === true) {
        return;
    }

    // 只有有 name 和 path 的路由才添加到菜单
    if (route.name && route.path) {
        const currentPath = route.path.startsWith('/') ? route.path : `/${route.path}`;
        const locale = getLocaleByPath(currentPath);

        items.push({
            name: route.name,
            path: currentPath,
            locale,
        });
    }
}

/**
 * 从路由配置中提取菜单项
 * 只包含 hideInMenu !== true 的路由，且只提取顶层路由（不包含子路由）
 */
function extractMenuItems(routes: AppRouteObject[]): NavMenuItem[] {
    const items: NavMenuItem[] = [];

    for (const route of routes) {
        // 如果路由有 children，只处理第一层 children，不递归处理更深层的子路由
        if (route.children) {
            for (const childRoute of route.children) {
                processRouteItem(childRoute, items);
            }
            // 处理完 children 后继续下一个路由，不处理当前路由本身
            continue;
        }

        // 如果没有 children，处理当前路由
        processRouteItem(route, items);
    }

    return items;
}

/**
 * 获取导航菜单项
 * @returns 菜单项数组
 */
export function getNavMenuItems(): NavMenuItem[] {
    return extractMenuItems(routerConfig);
}
