import { createApp } from 'vue'
import App from './App.vue'
// reset style sheet
import '@/styles/reset.scss'
// CSS common style sheet
import '@/styles/common.scss'
// iconfont css
import '@/assets/iconfont/iconfont.scss'
// font css
import '@/assets/fonts/font.scss'
// element css
import 'element-plus/dist/index.css'
// element dark css
import 'element-plus/theme-chalk/dark/css-vars.css'
// custom element dark css
import '@/styles/element-dark.scss'
// custom element css
import '@/styles/element.scss'
// svg icons
import 'virtual:svg-icons-register'
// element plus
import ElementPlus from 'element-plus'
// element icons
import * as Icons from '@element-plus/icons-vue'
// custom directives
import directives from '@/directives/index'
// vue Router
import router from '@/routers'
// vue i18n
import I18n from '@/languages/index'
// pinia store
import pinia from '@/stores'
// errorHandler
import errorHandler from '@/utils/errorHandler'

import registerGlobComp from '@/components'

const app = createApp(App)

// 自定义警告处理程序，忽略所有警告
app.config.warnHandler = () => {
}
// if (import.meta.env.VUE_APP_SILENCE_WARNINGS === true) {
// }

app.config.errorHandler = errorHandler

// register the element Icons component
Object.keys(Icons).forEach(key => {
    app.component(key, Icons[key as keyof typeof Icons])
})

const setupAll = async () => {
    app
        .use(ElementPlus)
        .use(directives)
        .use(router) // 使用路由
        .use(I18n)
        .use(pinia)
        .use(registerGlobComp) // 使用全局自定义组件

    //待路由初始化完毕后，挂载app
    await router.isReady()
}

//挂载app
setupAll().then(() => {
    app.mount('#app')
})
