import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': resolve(__dirname, 'src')
    }
  },
  // 生产/开发环境配置
  base: process.env.NODE_ENV === 'production' ? '/' : '/',
  
  // 开发服务器配置
  server: {
    port: 8081,
    host: '0.0.0.0', // 允许外部访问
    allowedHosts: true, // 允许所有主机访问
    proxy: {
      '/api': {
        // 开发时代理到本地后端（统一为 localhost:8080）
        target: process.env.VITE_APP_API_URL || 'http://localhost:8080',
        changeOrigin: true,
        secure: false,
        // 后端服务器路径已经包含 /api，所以不需要 rewrite
        // 前端请求 /api/xxx 会转发到 http://localhost:8080/api/xxx
        // 调试时将 cookie 域改写为 localhost
        cookieDomainRewrite: 'localhost',
        cookiePathRewrite: '/',
        configure: (proxy, _options) => {
          proxy.on('error', (err, _req, _res) => {
            console.log('proxy error', err);
          });
          proxy.on('proxyReq', (proxyReq, req, _res) => {
            console.log('Sending Request to the Target:', req.method, req.url);
          });
          proxy.on('proxyRes', (proxyRes, req, _res) => {
            console.log('Received Response from the Target:', proxyRes.statusCode, req.url);
            const setCookie = proxyRes.headers['set-cookie'];
            if (setCookie) {
              console.log('Proxy Set-Cookie:', setCookie);
            }
          });
        }
      }
    }
  },
  
  // public 目录配置（确保字体文件等静态资源被复制）
  publicDir: 'public',
  
  // 生产环境构建配置
  build: {
    outDir: 'dist',
    assetsDir: 'static',
    copyPublicDir: true,
    // 使用 terser 压缩，移除 console
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true
      }
    },
    // 启用 CSS 代码分割
    cssCodeSplit: true,
    // 禁用 source map
    sourcemap: false,
    // 代码分割优化
    rollupOptions: {
      output: {
        // 为所有资源文件（包括SVG）生成内容哈希
        assetFileNames: (assetInfo) => {
          // 获取文件扩展名
          const extType = assetInfo.name.split('.').pop();
          // 图片类型（包括SVG）
          if (/png|jpe?g|gif|svg|webp|ico/i.test(extType)) {
            return `static/images/[name]-[hash][extname]`;
          }
          // 字体类型
          if (/woff2?|eot|ttf|otf/i.test(extType)) {
            return `static/fonts/[name]-[hash][extname]`;
          }
          // 其他资源
          return `static/[name]-[hash][extname]`;
        },
        // JS文件哈希
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        manualChunks: {
          'vue-vendor': ['vue', 'vue-router', 'pinia'],
          'antd': ['ant-design-vue', '@ant-design/icons-vue'],
          'utils': ['axios']
        }
      }
    },
    // 块大小警告限制
    chunkSizeWarningLimit: 1000
  }
})
