import type { Router } from "vue-router"
import { useKeepAliveStore } from "@/pinia/stores/keep-alive"
import { useUserStore } from "@/pinia/stores/user"
import { isWhiteList } from "@/router/whitelist"
import { useTitle } from "@@/composables/useTitle"
import { getToken } from "@@/utils/cache/cookies"
import NProgress from "nprogress"
import { useAb98UserStore } from '@/pinia/stores/ab98-user'


NProgress.configure({ showSpinner: false })

const { setTitle } = useTitle()

const LOGIN_PATH = "/ab98"

export function registerNavigationGuard(router: Router) {
  // 全局前置守卫
  router.beforeEach((to, _from) => {
    NProgress.start()
    
    // 企业微信登录
    const urlParams = new URLSearchParams(window.location.search);
    const corpid = urlParams.get('corpid') || undefined;
    if (corpid) {
      return true;
    }
    const isAdmin = urlParams.get('isAdmin') || undefined;
    if (isAdmin) {
      return true;
    }
    const cid = urlParams.get('cid') || undefined;
    if (cid) {
      return true;
    }

    // useAb98UserStore位置不能放在外面，否则会导致路由守卫无法正常工作
    const ab98UserStore = useAb98UserStore();
    if (!ab98UserStore.isLogin) {
        // 如果在免登录的白名单中，则直接进入
        if (isWhiteList(to)) return true
        // 其他没有访问权限的页面将被重定向到登录页面
        return LOGIN_PATH
    }
    return true;
    // const userStore = useUserStore()
    // // 如果没有登录
    // if (!getToken()) {
    //   // 如果在免登录的白名单中，则直接进入
    //   if (isWhiteList(to)) return true
    //   // 其他没有访问权限的页面将被重定向到登录页面
    //   return LOGIN_PATH
    // }
    // // 如果已经登录，并准备进入 Login 页面，则重定向到主页
    // if (to.path === LOGIN_PATH) return "/"
    // // 判断有无该页面权限
    // if (to.meta.roles ? userStore.roles.some(role => to.meta.roles!.includes(role)) : true) return true
    // // 无权限则进入 403 页面
    // return "/403"
  })
  // 全局后置钩子
  router.afterEach((to) => {
    const keepAliveStore = useKeepAliveStore()
    // 清除所有路由缓存
    // if (to.path === LOGIN_PATH) keepAliveStore.delAllCachedRoutes()
    // 添加路由缓存
    keepAliveStore.addCachedRoute(to)
    // 设置标题
    setTitle(to.meta.title)
    NProgress.done()
  })
}
