import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
// @ts-ignore
import { TokenManager } from 'shared/api'
// @ts-ignore
import { APP_CONFIG } from 'shared/config'
// @ts-ignore
import { loadRoutesFromStorage } from './dynamicRoute'

// bidding应用的动态路由会根据layout字段自动添加，不需要预定义Root布局
const routes: RouteRecordRaw[] = []

const router = createRouter({
    history: createWebHistory('/bidding'),  // 与nginx保持一致，使用/bidding前缀
    routes
})

// 标记动态路由是否已加载
let dynamicRoutesLoaded = false

// 路由守卫
router.beforeEach((to, from, next) => {
    console.log('[Bidding Router] 路由守卫触发:', {
        to: to.path,
        from: from.path,
        meta: to.meta
    })
    
    // 设置页面标题
    if (to.meta.title) {
        document.title = `${to.meta.title} - 招标管理系统`
    }
    
    // 检查是否需要登录
    const requiresAuth = to.meta.requiresAuth !== false
    const hasToken = TokenManager.hasToken()
    
    console.log('[Bidding Router] 认证检查:', {
        requiresAuth,
        hasToken,
        tokenValue: localStorage.getItem('token')
    })
    
    // 其他页面：检查是否需要登录
    if (requiresAuth && !hasToken) {
        // 需要登录但未登录，重定向到 platform 的登录页
        // 重要：必须使用完整URL（包含origin），避免被bidding的路由拦截造成循环
        const currentUrl = window.location.href
        const origin = window.location.origin
        
        // 构建platform登录页的完整URL
        const loginUrl = `${origin}/login?redirect=${encodeURIComponent(currentUrl)}`
        
        console.log('[Bidding Router] 未登录，重定向到Platform登录页:', loginUrl)
        
        // 使用完整URL跳转，跳出bidding的路由系统
        window.location.href = loginUrl
        return
    }
    
    // 如果已登录且动态路由未加载，先加载动态路由
    if (hasToken && !dynamicRoutesLoaded) {
        console.log('[Bidding Router] 开始加载动态路由...')
        console.log('[Bidding Router] LocalStorage 内容:', {
            loginDomain: localStorage.getItem('loginDomain'),
            token: localStorage.getItem('token')
        })
        
        dynamicRoutesLoaded = true
        const loaded = loadRoutesFromStorage?.()
        
        console.log('[Bidding Router] 动态路由加载结果:', loaded)
        console.log('[Bidding Router] 当前路径:', to.path)
        console.log('[Bidding Router] 所有路由:', router.getRoutes().map(r => r.path))
        
        if (loaded) {
            // 动态路由加载成功，重新导航以匹配新添加的路由
            console.log('[Bidding Router] 动态路由加载成功，重新导航到:', to.path)
            next({ ...to, replace: true })
            return
        } else {
            console.warn('[Bidding Router] 动态路由加载失败')
        }
    }
    
    console.log('[Bidding Router] 继续正常导航')
    next()
})

// 重置动态路由加载状态
export function resetDynamicRoutes() {
    dynamicRoutesLoaded = false
}

export default router
