import { createApp } from 'vue'
import type { App as VueApp } from 'vue'
import App from './App.vue'
import router from './router'

// ============================================================
// micro-app 子应用生命周期
// ============================================================

let app: VueApp | null = null

/**
 * 挂载函数 — 在微前端环境中由 micro-app 框架调用
 */
function mount(): void {
  app = createApp(App)
  app.use(router)
  app.mount('#microapp-vue3-root')

  console.log('[microapp-vue3] 子应用已挂载')
}

/**
 * 卸载函数 — 在微前端环境中由 micro-app 框架调用
 */
function unmount(): void {
  if (app) {
    app.unmount()
    const root = document.getElementById('microapp-vue3-root')
    if (root) {
      root.innerHTML = ''
    }
    app = null
  }
  console.log('[microapp-vue3] 子应用已卸载')
}

// ============================================================
// 环境判断：微前端环境 vs 独立运行
// ============================================================

// window.__MICRO_APP_ENVIRONMENT__ 是 micro-app 注入的全局变量
// https://jd-opensource.github.io/micro-app/docs.html#/domains/child-app
if (window.__MICRO_APP_ENVIRONMENT__) {
  // ✅ 运行在微前端环境中 — 导出生命周期钩子
  // micro-app 会通过 window[`micro-app-${appName}`] 找到并调用 mount/unmount
  ;(window as Record<string, any>)[`micro-app-${window.__MICRO_APP_NAME__}`] = { mount, unmount }

  console.log(
    `[microapp-vue3] 检测到微前端环境，应用名称: ${window.__MICRO_APP_NAME__}`
  )
} else {
  // ✅ 独立运行 — 直接挂载，方便开发调试
  mount()
}
