import type { RouteLocationNormalized, RouteLocationRaw } from 'vue-router';
import type { TagProps } from '@/store/modules/tab-bar/types';
import { createRouter, createWebHistory } from 'vue-router';
import { appRoutes } from './routes';
import { openWindow } from '@/utils';
import { isStandaloneMode } from '@/utils/env';
import createRouteGuard from './guard';
import baseRouters from './routes/base';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';

NProgress.configure({ showSpinner: false });

// 创建路由
const router = createRouter({
  history: createWebHistory(),
  routes: [
    ...baseRouters,
    ...appRoutes,
  ],
  scrollBehavior() {
    return { top: 0 };
  },
});

// 创建路由守卫
createRouteGuard(router);

// 新页面打开路由
export const openNewRoute = (route: RouteLocationRaw) => {
  const { href } = router.resolve(route);
  if (isStandaloneMode) {
    // 单应用 PWA 则跳转
    window.location.href = href;
  } else {
    // 浏览器 则直接打开
    openWindow(href);
  }
};

// route 转 tag
export const getRouteTag = (route: RouteLocationNormalized): TagProps => {
  const { name, meta, path, fullPath, query } = route;
  return {
    title: getRouteTitle(route),
    name: String(name),
    path,
    fullPath,
    query,
    ignoreCache: meta.ignoreCache,
  };
};

// 获取 router title
export const getRouteTitle = (route: RouteLocationNormalized) => {
  const { meta } = route;
  // 如果 meta.localeTemplate 则根据路由生成
  if (meta.localeTemplate) {
    return meta?.localeTemplate(route) || meta.locale || '';
  }
  return meta.locale || '';
};

export default router;
