import {defineConfig, loadEnv} from 'vite';
import path from 'node:path';
import electron from 'vite-plugin-electron/simple';
import react from '@vitejs/plugin-react';
import renderer from 'vite-plugin-electron-renderer';
import tailwindcss from '@tailwindcss/vite';
import {visualizer} from 'rollup-plugin-visualizer';

const __dirname = import.meta.dirname;

// ============================================================
// 热更新说明
// ============================================================
// 修改 src/         → React Fast Refresh（组件级热替换，不丢失状态）
// 修改 electron/    → 主进程重建 + Electron 自动重启（预期行为）
// 修改 shared/      → 因为 shared/ 被主进程引用，也会触发重启
//                     如需避免，可把仅渲染进程用的类型放到 src/types/
// ============================================================

export default defineConfig(({mode}) => {
    // 加载 .env.development / .env.production 中的环境变量
    const env = loadEnv(mode, __dirname, '');

    return {
        plugins: [
            react(),
            tailwindcss(),
            electron({
                main: {
                    // 主进程入口
                    entry: 'electron/main.ts',
                    // 只监听 electron/ 目录，避免 shared/ 变更误触重启
                    // （默认会监听 entry 文件的所有依赖，包括 shared/）
                },
                preload: {
                    input: path.join(__dirname, 'electron/preload.ts'),
                },
            }),
            renderer(),
            // 打包体积分析（仅 ANALYZE=true 时生成 stats.html）
            process.env.ANALYZE &&
            visualizer({
                open: true,
                gzipSize: true,
                brotliSize: true,
                filename: 'dist/stats.html',
            }),
        ].filter(Boolean),
        resolve: {
            alias: {
                '@': path.resolve(__dirname, 'src'),
                '@shared': path.resolve(__dirname, 'shared'),
            },
        },
        // ============================================================
        // 编译时注入环境变量到主进程
        // 主进程中的 process.env.xxx 会在编译时被替换为实际值
        // 这样无需在 OS 环境中设置这些变量
        // ============================================================
        define: {
            'process.env.UPDATE_API_URL': JSON.stringify(env.UPDATE_API_URL || 'https://www.heixiu.com'),
        },
        // ============================================================
        // 开发服务器 & HMR 配置
        // ============================================================
        server: {
            port: 5173,
            strictPort: true,
            host: "0.0.0.0",
            watch: {
                // Windows 上默认的 fs.watch 有时不稳定，
                // 如果文件保存后界面无反应，可临时开启 usePolling
                // usePolling: true,
                // interval: 100,
                // 忽略不需要监听的目录，减少 CPU 占用
                ignored: ['**/node_modules/**', '**/dist/**', '**/dist-electron/**', '**/release/**', '**/test-server/**', "**/**/*.md"],
            },
            // HMR 配置
            hmr: {
                // 在浏览器控制台显示 HMR 覆盖层（错误/警告时）
                overlay: true,
            },
            proxy: mode === "development" ? {
                "/api": {
                    target: env.VITE_API_BASE_URL || "http://192.168.110.84:8000", // 从环境变量读取，默认为本地后端
                    changeOrigin: true,
                    bypass: (req) => {
                        if (req.headers.accept?.includes('text/html')) return '/index.html'
                    },
                },
                '/uploads': {
                    target: env.VITE_API_BASE_URL ?? 'http://192.168.110.84:8000',
                    changeOrigin: true,
                },
            } : undefined, // 生产环境不启用代理
        },
        build: {
            rollupOptions: {
                output: {},
            },
        },
        preview: {
            port: 5173,
        },
    };
});
