import { VENDOR_CHUNKS } from './chunks';

import type { BuildOptions } from 'vite';

/**
 * 浏览器支持基线（esbuild target 语法）：chrome87/safari13/firefox78/edge88 这条老线。
 * 仅用于 build.cssTarget（CSS 的压缩/降级目标）——build.target 不设，JS 语法降级交给 legacy() 用 Babel 处理。
 * 注：legacy() 的 targets 用 browserslist 语法（'safari >= 13'）表达同一条基线，二者需保持一致。
 */
export const CSS_TARGET = ['chrome87', 'safari13', 'firefox78', 'edge88'];

/**
 * 构建配置。依赖渲染模式（isCSR）与环境（isProd），故以工厂函数导出。
 * @param isCSR 是否 CSR 模式。CSR 单环境构建，需显式 outDir 与内联 manualChunks；
 *              SSG 由 react-router.config.ts 接管 outDir，分包经 clientChunksPlugin 注入。
 * @param isProd 是否生产构建。生产关闭 sourcemap。
 */
export function createBuildOptions(isCSR: boolean, isProd: boolean): BuildOptions {
    return {
        // CSR：输出到 dist（无 react-router.config 管理，需显式指定）。
        // SSG：输出目录由 react-router.config.ts 的 buildDirectory 接管（dist/client、dist/server），此处不设。
        ...(isCSR ? { outDir: 'dist' } : {}),
        sourcemap: !isProd,
        // build.target 不设：JS 现代 chunk 走 vite 默认基线，语法降级由 legacy() 用 Babel 处理。
        // CSS 不经 legacy 处理，故显式指定 cssTarget 到老浏览器基线（与 legacy targets 对齐）。
        cssTarget: CSS_TARGET,
        rollupOptions: {
            output: {
                // CSR 单环境构建，vendor 分包直接在此声明（复用 VENDOR_CHUNKS）；
                // SSG 此处留空，分包由 clientChunksPlugin 仅注入 client 环境。
                ...(isCSR ? { manualChunks: VENDOR_CHUNKS } : {}),
            },
        },
        chunkSizeWarningLimit: 1500,
    };
}
