import {defineConfig, loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite';
import {AntDesignVueResolver} from 'unplugin-vue-components/resolvers';
import * as path from "node:path";
import vueJsx from '@vitejs/plugin-vue-jsx'

const pathSrc = path.resolve(__dirname, 'src');

// https://vitejs.dev/config/
export default defineConfig(({mode}) => {
    const env: Record<string, string> = loadEnv(mode, process.cwd(), '')
    return {
        define: {
            __APP_ENV: JSON.stringify(env)
        },
        base: '/securityManagement/',
        plugins: [
            vue(),
            vueJsx(),
            Components({
                resolvers: [
                    AntDesignVueResolver({importStyle: false})
                ]
            })
        ],
        resolve: {
            alias: {
                '@': pathSrc,
            }
        },
        server: {
            host: '0.0.0.0',
            port: parseInt(env['VITE_APP_PORT']),
            open: false,
            proxy: {
                [env["VITE_APP_BASE_API"]]: {
                    target: env["VITE_APP_PROXY_URL"],
                    changeOrigin: true,
                    secure: false,
                    rewrite: path => path.replace(RegExp(`^${env['VITE_APP_BASE_API']}`), '')
                }
            }
        },
        build: {
            outDir: 'securityManagement',
            target: 'modules',
            chunkSizeWarningLimit: 1500,
            minify: 'terser',
            terserOptions: {
                compress: {
                    //生产环境时移除console
                    drop_console: env['VITE_DROP_CONSOLE'] as unknown as boolean,
                    drop_debugger: env['VITE_DROP_CONSOLE'] as unknown as boolean,
                },
                format: {
                    //删除注释
                    comments: false
                }
            },
            rollupOptions: {
                output: {
                    manualChunks(id) {
                        if (id.includes('node_modules')) {
                            return id
                                .toString()
                                .split('node_modules/')[1]
                                .split('/')[0]
                                .toString();
                        }
                    },
                    chunkFileNames(chunkInfo) {
                        const facadeModuleId = chunkInfo.facadeModuleId ? chunkInfo.facadeModuleId.split('/') : [];
                        const fileName =
                            facadeModuleId[facadeModuleId.length - 2] || '[name]';
                        return `js/${fileName}/[name].[hash].js`;
                    }
                }
            }
        },
    }

})