import router from './router'

import NProgress from 'nprogress' // 引入进度条

import 'nprogress/nprogress.css' // 进度条样式

import { appStore } from '_@/store/modules/app'

import wsCache from '@/cache'

import getPageTitle from '@/utils/get-page-title'

NProgress.configure({ showSpinner: false }) // NProgress configuration

import { permissionStore } from '_@/store/modules/permission'

import type { RouteRecordRaw } from 'vue-router'

const whiteList: string[] = ['/login'] // 不重定向白名单
router.beforeEach((to, from, next) => {
  NProgress.start()
  if (wsCache.get(appStore.userInfo)) {
    if (to.path === '/login') {
      next({ path: '/' })
    } else {
      if (permissionStore.isAddRouters) {
        next()
        return
      }
      permissionStore.GenerateRoutes().then(() => {
        permissionStore.addRouters.forEach(async(route: RouteRecordRaw) => {
          await router.addRoute(route.name!, route) // 动态添加可访问路由表
        })
        const redirectPath = (from.query.redirect || to.path) as string
        const redirect = decodeURIComponent(redirectPath)
        const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect }
        permissionStore.SetIsAddRouters(true)
        next(nextData)
      })
    }
  } else {
    if (whiteList.indexOf(to.path) !== -1) {
      next()
    } else {
      // 否则全部重定向到登录页
      next({
        path: '/login',
        query: {
          redirect: to.path
        }
      })
    }
  }
})

router.afterEach((to) => {
  document.title = getPageTitle(to.meta.title, appStore.title)
  NProgress.done() // 结束进度条
})
