import { fileURLToPath, URL } from 'node:url'
import { readFileSync } from 'node:fs'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'

// 앱 버전 정보(설정 > 앱 버전)에 노출 — package.json 을 단일 출처로 사용
const pkg = JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf-8'))

// https://vite.dev/config/
export default defineConfig(({ mode }) => ({
  // Electron(데스크톱)은 file:// 로 로드하므로 상대경로 자산이 필요. 그 외(웹/Capacitor)는 '/'.
  base: mode === 'electron' ? './' : '/',
  define: {
    __APP_VERSION__: JSON.stringify(pkg.version),
  },
  build: {
    // 마크다운 에디터(toast-ui ~1MB)는 게시판 작성/상세 라우트에서만 동적 로딩되어
    // 메인 번들에 포함되지 않는다. 의도된 지연 청크이므로 경고 한도를 현실적으로 상향.
    chunkSizeWarningLimit: 1200,
  },
  plugins: [
    vue(),
    vueDevTools(),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    },
  },
  server: {
    port: 5173,
    proxy: {
      // /api 로 시작하는 요청을 Spring Boot(8080)로 프록시
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true,
      },
    },
  },
}))
