import path from 'node:path';

import vue from '@vitejs/plugin-vue';
import { visualizer } from 'rollup-plugin-visualizer';
import { defineConfig, loadEnv } from 'vite';
import mkcert from 'vite-plugin-mkcert';

export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd(), ['VITE_']);
  const isDev = env.VITE_NODE_ENV === 'development';
  const isAnalyze = env.VITE_NODE_ENV === 'analyze';

  return {
    // 服务器配置
    server: isDev
      ? {
          port: Number(env.VITE_PORT),
          // cors: true,
        }
      : undefined,

    // 插件配置
    plugins: [
      vue(),
      isDev && mkcert(),
      // 添加打包分析插件
      isAnalyze &&
        visualizer({
          filename: 'stats.html', // 分析图生成的文件名
          open: true, // 打包完成后自动打开浏览器
          gzipSize: true, // 显示gzip后的大小
          brotliSize: true, // 显示brotli压缩后的大小
          stat: true, // 显示包的状态信息
        }),
    ].filter(Boolean),

    // 解析配置
    resolve: {
      alias: {
        '@': path.resolve(process.cwd(), 'src'),
        $vtj: path.resolve(process.cwd(), '.vtj'),
      },
    },

    // 定义全局变量
    define: {
      'process.env': JSON.stringify(env),
    },

    // 打包配置
    build: {
      rollupOptions: {
        output: {
          // 可选：对代码进行分块
          manualChunks: {
            vendor: ['vue', 'vue-router', 'core-js'],
            'element-plus': ['element-plus'],
            icon: ['@vtj/icons'],
            chart: ['@vtj/charts'],
            utils: ['@vtj/utils'],
            fetch: ['axios', '@tanstack/vue-query'],
            sentry: ['@sentry/vue'],
            // 低代码引擎的内容打包到一块
            'low-code-engine': [
              '@vtj/core',
              // 物料手动拆分会报错,绕过它
              // '@vtj/materials',
              '@vtj/pro',
              '@vtj/renderer',
              '@vtj/ui',
              '@vtj/web',
            ],
          },
        },
      },
    },
  };
});
