/**
 * 路由配置
 * @file index.js
 * @description Vue Router 配置和路由守卫
 */
import { createRouter, createWebHistory } from 'vue-router'
import { useUserStore } from '@/stores'
import routes from './routes'

// 创建路由实例
const router = createRouter({
  history: createWebHistory('/bank/'), // 设置基础路径
  routes,
  scrollBehavior(to, from, savedPosition) {
    // 如果有保存的位置，则恢复到保存的位置
    if (savedPosition) {
      return savedPosition
    }
    // 否则滚动到顶部
    return { top: 0 }
  }
})

// 全局前置守卫
router.beforeEach(async (to, from, next) => {
  // 设置页面标题
  document.title = to.meta.title ? `${to.meta.title} - 银行管理后台系统` : '银行管理后台系统'
  
  // 获取用户存储
  const userStore = useUserStore()
  
  // 处理根路径的认证检查
  if (to.path === '/') {
    if (userStore.isLoggedIn) {
      next('/project-list')
    } else {
      next('/login')
    }
    return
  }
  
  // 如果访问登录页面且已有有效token，重定向到项目列表
  if (to.path === '/login' && userStore.token && userStore.isLoggedIn) {
    const redirectPath = to.query.redirect || '/project-list'
    next(redirectPath)
    return
  }
  
  // 检查该路由是否需要登录权限
  if (to.meta.requiresAuth) {
    // 如果需要登录但用户未登录，则重定向到登录页面
    if (!userStore.isLoggedIn) {
      next({
        path: '/login',
        query: { redirect: to.fullPath } // 保存原本要访问的路径，以便登录后重定向
      })
    } else {
      // 检查用户角色权限
      if (to.meta.roles && to.meta.roles.length > 0) {
        const userRole = userStore.getUserRoleName()
        if (!to.meta.roles.includes(userRole)) {
          // 用户角色不匹配，重定向到项目列表
          next('/project-list')
        } else {
          // 用户已登录且角色匹配，允许访问
          next()
        }
      } else {
        // 没有角色限制，允许访问
        next()
      }
    }
  } else {
    // 不需要登录权限的路由，直接访问
    next()
  }
})

// 全局后置钩子
router.afterEach((to, from) => {
  // 路由切换后的逻辑，如记录访问历史、分析等
  console.log(`路由从 ${from.path} 切换到 ${to.path}`)
})

export default router