import type { Plugin } from 'vite';

/**
 * vendor 分包策略。CSR 与 SSG 期望的分组一致，但注入方式因构建环境不同而分两处
 * （SSG 经 clientChunksPlugin 注入 client 环境，CSR 直接写 build.rollupOptions），
 * 故把分组表抽为单一常量，两处共用，避免改一处漏改另一处。
 */
export const VENDOR_CHUNKS = {
    'react-vendor': ['react', 'react-dom', 'react-router-dom'],
    'antd-vendor': ['antd', '@ant-design/icons'],
    'utils-vendor': ['lodash-es', 'ramda'],
    'i18n-vendor': ['i18next', 'react-i18next', 'i18next-browser-languagedetector'],
};

/**
 * vendor 分包仅注入客户端构建环境。
 * framework（SSG）模式下 Vite 分 client / ssr 两个环境构建，通过 configEnvironment 按环境名注入 manualChunks，
 * 避免 server 构建把 external 的 react 纳入分包而报错（EXTERNAL_MODULES_CANNOT_BE_INCLUDED_IN_MANUAL_CHUNKS）。
 * 仅 SSG 需要此插件；CSR 单环境构建，分包直接写在 build.rollupOptions 里。
 */
export const clientChunksPlugin: Plugin = {
    name: 'client-manual-chunks',
    configEnvironment(name: string) {
        if (name !== 'client') return;
        return {
            build: {
                rollupOptions: {
                    output: {
                        manualChunks: VENDOR_CHUNKS,
                    },
                },
            },
        };
    },
};
