import { createApp,ref, onBeforeUnmount} from 'vue'
import App from './App.vue'
import router from './router';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import zhCn from 'element-plus/es/locale/lang/zh-cn';
// import axiosInstance from '@/utils/axios-config';
import axios from 'axios';
import '@/assets/global.css'
import { useGlobalWebSocket } from './utils/useGlobalWebSocket';
import DataVVue3 from '@kjgl77/datav-vue3';
import '@kjgl77/datav-vue3/dist/style.css';


const app = createApp(App)
const globalWebSocket = useGlobalWebSocket();
app.provide('globalWebSocket', globalWebSocket);
// app.provide('axios', axiosInstance);
app.use(ElementPlus, { locale: zhCn });
app.use(router);
app.use(DataVVue3);

// 导航守卫，检查登录状态
router.beforeEach((to, from, next) => {
    const token = localStorage.getItem('alertToken'); // 检查 token 是否存在，作为是否登录的依据
    if (to.matched.some(record => record.meta.requiresAuth)) {
        // 该路由需要认证
        if (!token) {
            // 如果没有 token，重定向到登录页面
            next({
                path: '/login',
                query: { redirect: to.fullPath } // 将当前路径传递给登录页面，登录后可以重定向回来
            });
        } else {
            // 已登录，继续访问
            next();
        }
    } else {
        // 不需要认证，继续访问
        next();
    }
});

// 定义转换函数
app.config.globalProperties.xToh = (px: number): string => {
    const vh = (px / window.innerHeight) * 100;
    return `${vh}vh`;
};

app.config.globalProperties.xTow = (px: number): string => {
    const vw = (px / window.innerWidth) * 100;
    return `${vw}vw`;
};

app.config.globalProperties.vhToPx = (vh: number): number => {
    return (vh / 100) * window.innerHeight;
};

app.config.globalProperties.vwToPx = (vw: number): number => {
    return (vw / 100) * window.innerWidth;
};

// 响应式处理
const updateDimensions = () => {
    app.config.globalProperties.windowHeight = window.innerHeight;
    app.config.globalProperties.windowWidth = window.innerWidth;
};

window.addEventListener('resize', updateDimensions);
updateDimensions(); // 初始化

// 清理事件监听器
onBeforeUnmount(() => {
    window.removeEventListener('resize', updateDimensions);
});

app.mount('#app')
