// 引入unocss css
import '@/plugins/unocss'

// 导入全局的svg图标
import '@/plugins/svgIcon'

// 初始化多语言
import { setupI18n } from '@/plugins/vueI18n'

// 引入状态管理
import { setupStore } from '@/store'

// 全局组件
import { setupGlobCom } from '@/components'

// 引入 element-plus
import { setupElementPlus } from '@/plugins/elementPlus'

// 引入 form-create
import { setupFormCreate } from '@/plugins/formCreate'

import formCreateMobile from '@form-create/vant'
// 引入全局样式
import '@/styles/index.scss'

// 引入动画
import '@/plugins/animate.css'
// 引入打印设计器组件样式
import 'sv-print/dist/style.css'
// 路由
import router, { setupRouter } from '@/router'

// 指令
import { setupAuth, setupMountedFocus } from '@/directives'
import { createApp } from 'vue'
import Vant from 'vant' // 引入 Vant 整个库
import 'vant/lib/index.css' // 引入 Vant 样式
import App from './App.vue'

import './permission'

import '@/plugins/tongji' // 百度统计
import Logger from '@/utils/Logger'
// 引入hiPrint插件
import { hiPrintPlugin } from 'vue-plugin-hiprint'
import { hiprint, disAutoConnect } from 'sv-print'
import pluginApiPdf from '@sv-print/plugin-api-pdf3'
import pluginApiImage from '@sv-print/plugin-api-image'
import pluginEleBwip from "@sv-print/plugin-ele-bwip-js";
import pluginTextAuto from '@sv-print/plugin-text-auto'
hiprint.register({
  authKey: '53616C7465645F5F286B418F99190EA3DC1F152B8B1B393ECD4C3D064C735A6A',
  plugins: [
    pluginApiPdf(), // 插件参数
    pluginApiImage(), // 插件参数
    pluginTextAuto({
      sizeList: [10, 9, 8, 7, 6, 5], // 适应最小字体选项
      maxIterations: 15, // 适应次数
      enablePrecision: true, // 启用精确适应
      precision: 0.5, // 适应精确step
      precisionCount: 10, // 适应精确次数
      lineHeightMode: 'auto', // 行高模式 auto | original | normal | unset
      overrideHidden: false, // 超出是否隐藏
      extendsCss: {
        // 扩展css
        'word-wrap': 'break-word' // 单词换行
      }
    }), // 插件参数
    pluginEleBwip({})
  ]
})
disAutoConnect() // 取消自动连接
globalThis.autoConnect = false
import VueDOMPurifyHTML from 'vue-dompurify-html' // 解决v-html 的安全隐患
import { initWebSocket } from '@/utils/websocket'
// 引入字体加载工具
import { loadAllFonts } from '@/utils/fontLoader'
// // 创建WebSocket实例
// const ws = new WebSocket(`ws://localhost:${import.meta.env.VITE_PRINT_EXE_API_URL}/ws/`)

// // 全局socket状态变量
// globalThis.socketOpen = false

// // 监听WebSocket连接
// ws.onopen = () => {
//   console.log('WebSocket连接成功')
//   globalThis.socketOpen = true
// }

// ws.onerror = (error) => {
//   console.error('WebSocket连接错误:', error)
//   globalThis.socketOpen = false
// }

// ws.onclose = () => {
//   console.log('WebSocket连接关闭')
//   globalThis.socketOpen = false
// }
// 创建实例
const setupAll = async () => {
  const app = createApp(App)

  await setupI18n(app)

  setupStore(app)

  setupGlobCom(app)

  setupElementPlus(app)

  setupFormCreate(app)

  setupRouter(app)

  // directives 指令
  setupAuth(app)
  setupMountedFocus(app)

  await router.isReady()

  app.use(VueDOMPurifyHTML)
  app.use(Vant)
  app.use(formCreateMobile)
  // 配置hiPrint插件，$pluginName为自定义名称
  app.use(hiPrintPlugin, '$hiprint')
  // 将WebSocket实例挂载到Vue原型上
  // 初始化 WebSocket（项目启动时创建）
  initWebSocket()
    .then((ws) => {
      // 挂载到全局，兼容你原有代码逻辑
      app.config.globalProperties.$ws = ws
      ;(window as any).$vueApp = app
    })
    .catch((error) => {
      console.error('项目启动时 WebSocket 初始化失败:', error)
    })
  
  // 加载所有字体
  loadAllFonts()
    .then(() => {
      console.log('字体加载完成')
    })
    .catch((error) => {
      console.error('字体加载失败:', error)
    })
  
  // app.config.globalProperties.$ws = ws
  // 将app实例挂载到window上，方便全局使用
  ;(window as any).$vueApp = app
  app.mount('#app')
}

setupAll()

Logger.prettyPrimary(`欢迎使用`, import.meta.env.VITE_APP_TITLE)
