import type { ServerOptions } from 'vite';

/**
 * 开发服务器配置（含 API 代理）。依赖运行期 env（端口、代理目标），故以工厂函数导出。
 * 代理 /dev/api/v1 → VITE_DEV_PROXY_TARGET_API_BASE_URL，并 rewrite 掉前缀。
 * @param env 处理后的环境变量（wrapperEnv 产物）。
 */
export function createServerOptions(env: ImportMetaEnv): ServerOptions {
    return {
        port: env.VITE_DEV_PORT,
        host: '0.0.0.0',
        open: true,
        proxy: {
            '/dev/api/v1': {
                target: env.VITE_DEV_PROXY_TARGET_API_BASE_URL,
                changeOrigin: true,
                rewrite: (path) => path.replace(/^\/dev\/api\/v1/, ''),
                secure: false,
                configure: (proxy) => {
                    proxy.on('error', (err) => {
                        console.log('proxy error', err);
                    });
                    proxy.on('proxyReq', (_, req) => {
                        console.log(
                            'Sending Request to the Target:',
                            req.method,
                            req.url,
                            env.VITE_DEV_PROXY_TARGET_API_BASE_URL
                        );
                    });
                    proxy.on('proxyRes', (proxyRes, req) => {
                        console.log(
                            'Received Response from the Target:',
                            proxyRes.statusCode,
                            req.url
                        );
                    });
                },
            },
        },
        warmup: {
            clientFiles: ['./index.html', './src/{pages,components}/*'],
        },
    };
}
