import './assets/main.css'

import { createApp } from 'vue'
import { createPinia } from 'pinia'

import App from './App.vue'
import router from './router'
import { setupCapacitor } from './capacitor'
import { useAuthStore } from './stores/auth'
import { useDialog } from './composables/dialog'
import { reportFatal } from './composables/appError'
import { initTheme } from './theme'

// 저장된 테마(라이트/다크/시스템) 즉시 적용 — 첫 렌더 깜빡임 방지
initTheme()

// 네이티브 alert 를 인앱 다이얼로그로 대체 (PC 'sb_pt' 제목 제거 + 웹/APK 일관).
// confirm/prompt 는 동기 반환이라 오버라이드 불가 → 각 호출부에서 await dialog.confirm/prompt 사용.
const dialog = useDialog()
window.alert = (message) => {
  dialog.alert(message == null ? '' : String(message))
}

const app = createApp(App)

// 렌더/라이프사이클 중 처리되지 않은 오류 → 흰 화면 대신 폴백 UI 표시
app.config.errorHandler = (err, instance, info) => {
  reportFatal({ err, info })
}

app.use(createPinia())
app.use(router)

// 저장된 세션(자동 로그인)을 복원한 뒤 마운트 — 로그인 상태가 결정된 후 렌더
const auth = useAuthStore()
auth.restore().finally(() => {
  app.mount('#app')
  // 네이티브 앱(안드로이드)일 때만 동작 (웹은 no-op)
  setupCapacitor(router)
})
