import type { RouteRecordNormalized } from 'vue-router';

import { useRouter } from 'vue-router';

import { isHttpUrl, openRouteInNewWindow, openWindow } from '@vben/utils';

function useNavigation() {
  const router = useRouter();
  const routes = router.getRoutes();

  const routeMetaMap = new Map<string, RouteRecordNormalized>();

  routes.forEach((route) => {
    routeMetaMap.set(route.path, route);
  });

  const navigation = async (path: string, query?: string) => {
    const route = routeMetaMap.get(path);
    const { openInNewWindow = false, query: metaQuery = {} } = route?.meta ?? {};
    
    // 优先使用从菜单点击事件传递过来的query参数
    let finalQuery = metaQuery;
    if (query) {
      try {
        finalQuery = JSON.parse(query);
      } catch (e) {
        console.error('Failed to parse menu query:', e);
      }
    }
    
    if (isHttpUrl(path)) {
      openWindow(path, { target: '_blank' });
    } else if (openInNewWindow) {
      openRouteInNewWindow(path);
    } else {
      await router.push({
        path,
        query: finalQuery,
      });
    }
  };

  return { navigation };
}

export { useNavigation };
