import type { ConfigEnv, PluginOption } from 'vite';
import path from 'node:path';
import vue from '@vitejs/plugin-vue';
import { visualizer } from 'rollup-plugin-visualizer';
import UnoCSS from 'unocss/vite';
import AutoImport from 'unplugin-auto-import/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';

import Components from 'unplugin-vue-components/vite';
import viteCompression from 'vite-plugin-compression';

import envTyped from 'vite-plugin-env-typed';
import gitHashPlugin from './git-hash';
import createSvgIcon from './svg-icon';

const root = path.resolve(__dirname, '../../');

function plugins({ mode, command }: ConfigEnv): PluginOption[] {
  return [
    gitHashPlugin(),
    UnoCSS(),
    envTyped({
      mode,
      envDir: root,
      envPrefix: 'VITE_',
      filePath: path.join(root, 'types', 'import_meta.d.ts'),
    }),
    vue(),
    AutoImport({
      imports: ['vue'],
      eslintrc: {
        enabled: true,
      },
      resolvers: [ElementPlusResolver()],
      dts: path.join(root, 'types', 'auto-imports.d.ts'),
    }),
    Components({
      resolvers: [ElementPlusResolver()],
      dts: path.join(root, 'types', 'components.d.ts'),
    }),
    createSvgIcon(command === 'build'),

    // ✅ Gzip 构建产物压缩（仅生产构建）
    command === 'build'
    && viteCompression({
      verbose: true,
      disable: false,
      threshold: 10240,
      algorithm: 'gzip',
      ext: '.gz',
    }),

    // ✅ 构建分析图（仅生产构建）
    command === 'build'
    && visualizer({
      filename: './dist/stats.html',
      open: false, // 打包后自动打开分析图（true 可开启）
      gzipSize: true,
      brotliSize: true,
    }),

  ];
}

export default plugins;
