import router from './router'
// import Layout from '@/layout'
import {
  deleteToken,
  getToken
} from './utils/auth'
import store from './store'
import Vue from 'vue'

// 路由拦截
router.beforeEach(async (to, from, next) => {
  // debugger
  // 无需登录无需获取动态路由
  if (to?.meta?.noLogin) {
    next()
    return
  }
  // 前往登陆页面判断
  if (to.path === '/login-local') {
    if (!getToken()) {
      next()
      return
    }
    // onFilterRoutes(to, next)
    next('/')
    return
  }
  if (to.path === '/login') {
    next('/home')
    // return
  }

  if (!getToken()) {
    next({ path: '/login-local', query: { redirect: to.fullPath } })
    return
  }

  try {
    if (!store.state.user.loaded) {
      await store.dispatch('user/loadCurrentUser')
    }
  } catch (error) {
    deleteToken()
    next({ path: '/login-local', query: { redirect: to.fullPath } })
    return
  }

  const required = to.meta && to.meta.permissions ? to.meta.permissions : []
  const granted = store.state.user.userInfo.permissions || []
  if (required.some(permission => !granted.includes(permission))) {
    next('/404')
    return
  }

  next()
  // onFilterRoutes(to, next)
})
router.afterEach((to, from) => {
  document.title = to.meta.title ?? Vue.prototype.$DEFAULT_TITLE
})
// 路由过滤和跳转
// function onFilterRoutes (to, next) {
//   // 判断是否刷新页面重新加载路由
//   if (!store.getters.refresh) {
//     next()
//     return
//   }
//   // if (store.getters.roles && store.getters.roles.length) {
//   //   initRoutes(to, next, store.getters.roles)
//   //   return
//   // }
//   store.dispatch('menu/getMenu2').then(res => {
//     initRoutes(to, next, res)
//   })
//   // .catch(err => {
//   //   deleteToken()
//   //   next({ ...to, replace: true })
//   //   // next('/login-local')
//   //   Vue.prototype.$snackbar.error(err)
//   // })
// }

// function initRoutes (to, next, e) {
//   // debugger
//   store.commit('menu/SET_REFRESH', false) // 关闭更新
//   // 清除路由
//   resetRouter()
//   const routes = mapASyncRoutes(e)
//   // 路由替换
//   // debugger
//   // if (!routes.length) {
//   //   deleteToken()
//   //   // next('/login-local')
//   //   next({ ...to, replace: true })
//   //   return
//   // }
//   router.addRoute({ path: '/', redirect: '/home' })
//   routes.forEach(item => {
//     console.log(item)
//     router.addRoute(item)
//   })
//   router.addRoute({ path: '*', redirect: '/404', hidden: true })
//   // const hasHome = routes.find(_e => _e.name === 'home')
//   // router.addRoute({ path: '/', redirect: hasHome ? '/home' : chooseFirst(routes[0]) })
//   // router.addRoute({ path: '*', redirect: '/404', hidden: true })
//   console.log(router.getRoutes()) // 检查新路由是否已添加
//   debugger
//   next({ ...to, replace: true })
// }
// function chooseFirst (item) {
//   if (item.children && item.children.length > 0 && item.component.name === 'layoutIndex') {
//     return chooseFirst(item.children[0])
//   }
//   return item.path
// }
// 递归路由 转换为组件对象和路径
// function mapASyncRoutes (data) {
//   return data.map(item => {
//     if (!item.redirect) {
//       item.redirect = undefined
//     }
//     item.component = item.component === 'Layout' ? Layout : loadView(item.component)
//     if (item.children && item.children.length > 0) {
//       item.children = mapASyncRoutes(item.children)
//     }
//     return item
//   })
// }

// // 路由插件
// function loadView (view) {
//   return !view ? { render: (c) => c('router-view') } : () => import(`@/views/${view}`)
// }
