import Vue from 'vue'
import VueRouter from 'vue-router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import whiteList from './whiteList'
import {
  Auth,
  Cache
} from '@/util/auth'
import store from '../store'
import {
  staticRoute,
  routeHandle
} from './staticRoute'
import {
  login
} from '../api/common'
NProgress.configure({
  showSpinner: false
})

Vue.use(VueRouter)
//以下代码解决路由地址重复的报错问题
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

const router = new VueRouter({
  mode: 'hash',
  routes: staticRoute
})

// 路由跳转前验证
router.beforeEach((to, from, next) => {

  // 开启进度条
  NProgress.start()
  // 判断是否传入token

  const token = to.query.token
  const _token = Auth.getLoginInfo()
  // const userInfo = store.getters.userInfo 
  // const menu =  store.getters.menuMap
  const routers = router.getRoutes()
  // console.log('router', routers)
  // console.log('token', token)
  // console.log('_token', _token)
  // console.log('userInfo', userInfo)
  // console.log('menu', menu)

  if (token && token !== _token) { // 重新登录
    store.dispatch('clearStore')
    login({
      token: token
    }).then(res => {
      const {
        parentMenuList
      } = res.respData.menuMap
      if (res.msg === 201 && parentMenuList && parentMenuList.length > 0) {
        store.dispatch('saveMenuMap', parentMenuList)
        router.addRoutes(routeHandle(parentMenuList))
        store.dispatch('saveUserInfo', res.respData.userDto)
        Auth.setLoginInfo(res.respData.token)
        next({
          ...to,
          replace: true
        })
      } else {
        Message({
          type: 'error',
          message: res.content
        })
        next({
          path: '/error/404',
          replace: true
        })
      }
    })
  } else {
    if (routers.length > 7) {
      next()
    } else {
      store.dispatch('clearStore')
      login({
        token: token || _token
      }).then(res => {
        const {
          parentMenuList
        } = res.respData.menuMap
        if (res.msg === 201 && parentMenuList && parentMenuList.length > 0) {
          store.dispatch('saveMenuMap', parentMenuList)
          router.addRoutes(routeHandle(parentMenuList))
          store.dispatch('saveUserInfo', res.respData.userDto)
          Auth.setLoginInfo(res.respData.token)
          next({
            ...to,
            replace: true
          })
        } else {
          Message({
            type: 'error',
            message: res.content
          })
          next({
            path: '/error/404',
            replace: true
          })
        }
      })
    }
  }

  // if (token) {
  //   if (_token === token) {
  //     next()
  //   } else {
  //     store.dispatch('clearStore')
  //     login({token: token}).then(res => {
  //       if (res.msg === 201) {
  //         store.dispatch('saveMenuMap', res.respData.menuMap.parentMenuList)
  //         router.addRoutes(routeHandle(res.respData.menuMap.parentMenuList))
  //         store.dispatch('saveUserInfo', res.respData.userDto)
  //         Auth.setLoginInfo(res.respData.token)
  //         next()
  //       } else {
  //         this.$message.error(res.content)
  //         next({path: '/error/404', replace: true})
  //       }
  //     })
  //   }
  // } else {
  //   // 判断是否登录过
  //   if (Auth.getLoginInfo() && store.getters.userInfo && store.getters.menuMap){
  //     next()
  //   } else {
  //     if (Auth.getLoginInfo()) {
  //       const token = Auth.getLoginInfo()
  //       store.dispatch('clearStore')
  //       login({token: token}).then(res => {
  //         if (res.msg === 201) {
  //           store.dispatch('saveMenuMap', res.respData.menuMap.parentMenuList)
  //           router.addRoutes(routeHandle(res.respData.menuMap.parentMenuList))
  //           store.dispatch('saveUserInfo', res.respData.userDto)
  //           Auth.setLoginInfo(res.respData.token)
  //           next()
  //         } else {
  //           next({path: '/error/404', replace: true})
  //         }
  //       })
  //     } else {
  //         // 判断是否为白名单页面
  //       if (whiteList.indexOf(to.path) >= 0) {
  //         next()
  //       } else {
  //         store.dispatch('clearStore')
  //         next({path: '/error/404', replace: true})
  //       }
  //     }
  //   }
  // }



})

router.afterEach(() => {
  NProgress.done() // 结束Progress
})

export default router
