import router from './router'
import store from './store'
import NProgress from 'nprogress' // progress bar 进度条
import 'nprogress/nprogress.css' // progress bar style 进度条样式
import { Toast } from 'mint-ui'
import { getToken } from '@/utils/auth' // getToken from cookie
import { MyLocalStorage } from '@/assets/js/utils'
import { TOKEN, AD_FLAG, LOGIN_FLAG, SLIDER_FLAG, USER_ACCOUNT, USER_PWD } from '@/assets/js/storageConst'

console.log(SLIDER_FLAG)

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

const whiteList = ['/login','/slider'] // 不重定向白名单
// 全局钩子
router.beforeEach((to, from, next) => {
  NProgress.start() // 加载进度条
  console.log('to Path:'+to.path)
  const slider_flag = localStorage.getItem(SLIDER_FLAG)

  // 如果有token
  if (getToken()) {
    // 如果目标页时登录页进入登录页
    if (to.path === '/login') {
      next()
      NProgress.done() // if current page is dashboard will not trigger	afterEach hook, so manually handle it
    } else {
      // 当进入非登陆页时
      console.log('not to login ')
      if (store.getters.roleList.length === 0) { // 判断当前用户是否已拉取完user_info信息，如果角色信息为空，则重新拉取用户信息
        store.dispatch('GetInfo').then(res => { // 拉取用户信息
          // 远程访问获取权限列表（菜单&按钮）
          store.dispatch('GetMenus').then(() => {
            router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
            next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
          })
        }).catch((err) => { // 拉取信息失败的时候重新登录
          // Toast({
          //   message: '登录信息失效,请重新登录',
          //   position: 'bottom',
          // })
          // 清除缓存
          MyLocalStorage.Cache.remove(TOKEN)
          MyLocalStorage.Cache.remove(AD_FLAG)
          MyLocalStorage.Cache.remove(LOGIN_FLAG)
          MyLocalStorage.Cache.remove(SLIDER_FLAG)
          next({ name: 'login' })
        })
      } else { // 角色信息存在，继续跳转
        next()
      }
    }
  } else {// 如果没有token
    if (whiteList.indexOf(to.path) !== -1) { // 免登录白名单，直接进入
      if (to.path === '/login' && slider_flag=='true') { //如果是登录页，判断是否进入导航页
        console.log('goto slider page')
        next({name: 'slider'})
      }else{ //直接进入登录页
        next()
      }
    } else {
      //判断用户名密码是否还存在，如果在，后台登录后跳转
      const username = localStorage.getItem(USER_ACCOUNT)
      const password = localStorage.getItem(USER_PWD)
      if(username && username!=''){ //如果本地存储了用户名和密码，直接后台登录
        console.log('自动登录')
        store.dispatch('Login', {username,password}).then(() => {
          next()
          NProgress.done() // if current page is dashboard will not trigger	afterEach hook, so manually handle it
        }).catch((e) => {//后台登录失败
          // Toast({
          //   message: '用户登录信息失效，请重新登录',
          //   position: 'bottom',
          //   duration: 3 * 1000
          // })
          next({ name: 'login' }) // 重定向到登录页
          NProgress.done()
        })
      }else { //未存储用户名和密码， 直接跳转登录页
        console.log("redirect login")
        next({ name: 'login' }) // 否则全部重定向到登录页
        NProgress.done() // if current page is dashboard will not trigger	afterEach hook, so manually handle it
      }

    }
  }
})

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