import {createRouter, createWebHistory} from 'vue-router'
import staticRouter from './modules/static'
import webRouter from './modules/web'
import manageRouter from './modules/manage'
import Temp404 from '@/views/global/temp/404.vue'
import {mockGetUserInfo} from "@/api/modules/mock/global";
import {ElLoading, ElMessage} from "element-plus";
import {useAppStore} from "@/stores";
import {toLogin} from "@/utils/permissions";


const routes = [
    ...staticRouter,
    { path: '/:pathMatch(.*)*', name: 'NotFound', component: Temp404 },
    { path: '', redirect: '/web' },
    webRouter,
]

const router = createRouter({
    history: createWebHistory(),
    routes,
});

router.beforeEach((to, from , next) => {
    const AppStore = useAppStore()
    if (userInfo) {
        if (!AppStore.userInfo) {
            AppStore.$patch((state) => {
                state.userInfo = userInfo
            })
        }
        if (to.query.routeTitle) {
            to.meta.title = to.query.routeTitle
        }
        document.title = to.meta?.title || import.meta.env.VITE_TITLE
        next()
    } else if (to.path === '/login') {
        next()
    } else {
        ElMessage.error('用户信息获取失败!')
        toLogin()
    }
})
let userInfo = null
export const initMainRouter = async () => {
    if (localStorage.getItem('ss_token')) {
        const loading = ElLoading.service({
            lock: true,
            text: '加载中……',
            background: 'rgba(0, 0, 0, 0.7)',
        })
        await Promise.all([
            mockGetUserInfo()
        ]).then(async ([user]) => {
            userInfo = user.data
            console.log('管理员:', userInfo?.isAdmin)
            if (userInfo?.isAdmin) {
                router.addRoute(manageRouter)
            }
            loading.close()
        })
    } else if (location.pathname !== '/login') {
        toLogin()
    }
}
export default router;