/* eslint-disable @typescript-eslint/ban-ts-comment */

import { createApp, type App as AppType, type Component } from 'vue'

import './main.css'
import App from './App.vue'
import FcDesigner from '@form-create/designer'
import ELEMENT from 'element-plus'
import 'element-plus/dist/index.css'
import { renderWithQiankun, qiankunWindow } from 'vite-plugin-qiankun/dist/helper'
// @ts-ignore
import * as ElementPlusIconsVue from '@element-plus/icons-vue'

//封装弹窗方法
import setupComponent from './components'
import No_found from './components/404/no_found.vue'

let app: AppType | null = null
//导入方法

//导入方法
async function bootstrapVue3(component: Component) {
  if (qiankunWindow.__POWERED_BY_QIANKUN__) {
    console.log('处于独立运行模式...')
  }
  app = createApp(component)
  await setupComponent(app)
  for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
    app.component(key, component)
  }
  app.use(ELEMENT)
  app.use(FcDesigner.formCreate)
  app.mount(document.getElementById('app') as HTMLElement)
}

// bootstrapVue3()

const initQianKun = () => {
  renderWithQiankun({
    // 当前应用在主应用中的生命周期
    // 文档 https://qiankun.umijs.org/zh/guide/getting-started#
    mount(props) {
      bootstrapVue3(App)
      //  可以通过props读取主应用的参数：msg
      // 监听主应用传值以及我本身的一些业务逻辑
      props.setLoading(false)
      props.onGlobalStateChange((res: string) => {
        console.log('res:', res)
      })
    },
    bootstrap() {
      // 做一些一次性的初始化的工作，因为只触发一次
    },
    update() {},
    unmount() {
      // 卸载子应用
      app?.unmount()
      app = null
    },
  })
}

// 判断当前应用是否在主应用中
if (qiankunWindow.__POWERED_BY_QIANKUN__) {
  // 生命周期钩子 - bootstrap
  // 会在微应用初始化的时候调用一次，之后不会被调用
  initQianKun()
} else {
  // 独立运行时，直接挂载应用
  bootstrapVue3(No_found)
}
