import { defineConfig } from 'vite';
import dts from 'vite-plugin-dts';
import path from 'path';
import packageJson from './package.json';
import jsconfigPaths from 'vite-jsconfig-paths';
import type { PluginOption } from 'vite';
import { visualizer } from 'rollup-plugin-visualizer';

export default defineConfig(({ mode }) => {
  const plugins = [
    dts({
      rollupTypes: true,
      bundledPackages: ['@opentiny/genui-sdk-core', '@opentiny/genui-sdk-chat-completions'],
    }),
    jsconfigPaths({
      projects: ['./tsconfig.json'],
    }) as PluginOption,
  ];

  if (mode === 'analyze') {
    plugins.push(
      visualizer({
        open: true,
      }),
    );
  }

  return {
    plugins,

    build: {
      lib: {
        entry: {
          index: path.resolve(__dirname, 'src/index.ts'),
          cli: path.resolve(__dirname, 'src/cli.ts'),
        },
        formats: ['es'],
      },
      outDir: 'output/dist',
      sourcemap: mode === 'no-obfuscator',
      rollupOptions: {
        external: (id) => {
          if (id.includes('@opentiny/genui-sdk-core')) {
            return false;
          }
          if (id.startsWith('node:')) {
            return true;
          }
          const deps = Object.keys(packageJson.dependencies || {});
          return deps.some((dep) => id === dep || id.startsWith(`${dep}/`));
        },
        output: {
          entryFileNames: (chunkInfo) => {
            if (chunkInfo.name === 'index') return 'index.js';
            if (chunkInfo.name === 'cli') return 'cli.js';
            return '[name].js';
          },
        },
      },
    },
  };
});