import Vue from 'vue'
import router from './router'
import store from './store'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import notification from 'ant-design-vue/es/notification'
import { ACCESS_TOKEN,INDEX_MAIN_PAGE_PATH, OAUTH2_LOGIN_PAGE_PATH } from '@/store/mutation-types'
import { generateIndexRouter, isOAuth2AppEnv } from '@/utils/util'
// 修改框架
import cookie from 'js-cookie'
import { getAction, postAction } from '@api/manage'

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

const whiteList = ['/user/login', '/user/register', '/user/register-result','/user/alteration'] // no redirect whitelist
whiteList.push(OAUTH2_LOGIN_PAGE_PATH)
whiteList.push('/iot-sso/login')
whiteList.push('/org/login') // 为了原始admin管理员设置菜单等 

router.beforeEach((to, from, next) => {
  //update-begin---author:scott ---date:2022-10-13  for：[jeecg-boot/issues/4091]多级路由缓存问题 #4091-----------
  //解决三级菜单无法缓存问题
  //参考： https://blog.csdn.net/qq_37322135/article/details/126013301
  //参考： https://blog.csdn.net/cwin8951/article/details/106644118
  if (to.matched && to.matched.length>3) {
    to.matched.splice(2, to.matched.length - 3)
  }

  // console.log(to)

  // let param = {}
  // param.eiToken = ''
  // param.username = 'iotedge@iotedge.sense'
  // param.token = cookie.get('EIToken')
  // param.username = cookie.get('WISEUser')
  var loginType = cookie.get('EIName')
  console.log(loginType)
  if(loginType === 'sso' || !loginType){
    store.dispatch('TzLogin').then(response => {
      // 有EIToken
      // console.log('pppppppppresult', response)
      if (to.path === '/user/login' || to.path === OAUTH2_LOGIN_PAGE_PATH) {
        next({ path: INDEX_MAIN_PAGE_PATH })
        NProgress.done()
      } else {
        if (store.getters.permissionList.length === 0) {
          store.dispatch('GetInterlockPermissionList').then(res => {
            const menuData = res.result.menu;
            //console.log(res.message)
            if (menuData === null || menuData === "" || menuData === undefined) {
              return;
            }
            let constRoutes = [];
            constRoutes = generateIndexRouter(menuData);
            // 添加主界面路由
            store.dispatch('UpdateAppRouter',  { constRoutes }).then(() => {
              // 根据roles权限生成可访问的路由表
              // 动态添加可访问路由表
              router.addRoutes(store.getters.addRouters)
              const redirect = decodeURIComponent(from.query.redirect || to.path)
              if (to.path === redirect) {
                // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
                next({ ...to, replace: true })
              } else {
                // 跳转到目的路由
                next({ path: redirect })
              }
            })
          })
          .catch(() => {
            /* notification.error({
              message: '系统提示',
              description: '请求用户信息失败，请重试！'
            })*/
            store.dispatch('Logout').then(() => {
              next({ path: '/user/login' })
              // next({ path: '/user/login', query: { redirect: to.fullPath } })
            })
          })
        } else {
          // next()
          // console.log(from, to)
          // console.log(from.meta.replace)
          // 从添加页面跳转其他页面后需要删除联锁添加页面
          if(from.path === '/interLock/summary/set'){
            // 为了解决循环设置了replace
            if(!from.meta.replace){
              from.meta.replace = true
              next({ ...to, replace: true })
            } else {
              from.meta.replace = false
            }
            // console.log(11111)
            // console.log(from)
            // from.meta.replace = false
          } else {
            next()
          }
          // 联锁添加页面刷新--返回联锁总表页面
          if(from.path === '/' && to.path === '/interLock/summary/set'){
            next({ path: '/interLock/summary'})
          } else {
            next()
          }
        }
      }
    })
    .catch(() => {
      // 没有EIToken-判断有没有token
      if (whiteList.indexOf(to.path) !== -1) {
        // 在免登录白名单，如果进入的页面是login页面并且当前是OAuth2app环境，就进入OAuth2登录页面
        if (to.path === '/user/login' && isOAuth2AppEnv()) {
          next({path: OAUTH2_LOGIN_PAGE_PATH})
        } else {
          // 在免登录白名单，直接进入
          next()
        }
        NProgress.done()
      } else {
        // 如果当前是在OAuth2APP环境，就跳转到OAuth2登录页面
        let path = isOAuth2AppEnv() ? OAUTH2_LOGIN_PAGE_PATH : '/user/login'
        next({ path: path })
        // next({ path: path, query: { redirect: to.fullPath } })
        NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it
      }
    })
  }
  if(loginType === 'system'){
    if (Vue.ls.get(ACCESS_TOKEN)) {
      /* has token */
      if (to.path === '/user/login' || to.path === OAUTH2_LOGIN_PAGE_PATH) {
        next({ path: INDEX_MAIN_PAGE_PATH })
        NProgress.done()
      } else {
        if (store.getters.permissionList.length === 0) {
          store.dispatch('GetPermissionList').then(res => {
                const menuData = res.result.menu;
                //console.log(res.message)
                if (menuData === null || menuData === "" || menuData === undefined) {
                  return;
                }
                let constRoutes = [];
                constRoutes = generateIndexRouter(menuData);
                // 添加主界面路由
                store.dispatch('UpdateAppRouter',  { constRoutes }).then(() => {
                  // 根据roles权限生成可访问的路由表
                  // 动态添加可访问路由表
                  router.addRoutes(store.getters.addRouters)
                  const redirect = decodeURIComponent(from.query.redirect || to.path)
                  if (to.path === redirect) {
                    // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
                    next({ ...to, replace: true })
                  } else {
                    // 跳转到目的路由
                    next({ path: redirect })
                  }
                })
              })
            .catch(() => {
             /* notification.error({
                message: '系统提示',
                description: '请求用户信息失败，请重试！'
              })*/
              store.dispatch('Logout').then(() => {
                next({ path: '/user/login' })
                // next({ path: '/user/login', query: { redirect: to.fullPath } })
              })
            })
        } else {
          // console.log(from, to)
          // 从添加页面跳转其他页面后需要删除联锁添加页面
          if(from.path === '/interLock/summary/set'){
            // 为了解决循环设置了replace
            // from.meta.replace = true
            // next({ ...to, replace: true })
            // from.meta.replace = false
            if(!from.meta.replace){
              from.meta.replace = true
              next({ ...to, replace: true })
            } else {
              from.meta.replace = false
            }
          } else {
            next()
          }
          // 联锁添加页面刷新--返回联锁总表页面
          if(from.path === '/' && to.path === '/interLock/summary/set'){
            next({ path: '/interLock/summary'})
          } else {
            next()
          }
          // next()
        }
      }
    } else {
      if (whiteList.indexOf(to.path) !== -1) {
        // 在免登录白名单，如果进入的页面是login页面并且当前是OAuth2app环境，就进入OAuth2登录页面
        if (to.path === '/user/login' && isOAuth2AppEnv()) {
          next({path: OAUTH2_LOGIN_PAGE_PATH})
        } else {
          // 在免登录白名单，直接进入
          next()
        }
        NProgress.done()
      } else {
        // 如果当前是在OAuth2APP环境，就跳转到OAuth2登录页面
        let path = isOAuth2AppEnv() ? OAUTH2_LOGIN_PAGE_PATH : '/user/login'
        next({ path: path })
        // next({ path: path, query: { redirect: to.fullPath } })
        NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it
      }
    }
  }
})

router.afterEach(() => {
  NProgress.done() // finish progress bar
})
