/// <reference types="vitest/config" />
import { defineConfig } from 'vite';
import { resolve } from 'path';

export default defineConfig({
  root: 'src/local_deep_research/web/static',
  base: '/static/',

  // Ensure Vite handles Font Awesome fonts correctly
  assetsInclude: ['**/*.woff', '**/*.woff2', '**/*.ttf', '**/*.eot'],

  build: {
    // Output directory relative to root
    outDir: 'dist',

    // Generate manifest for Flask integration
    manifest: true,

    // Single entry point that includes all dependencies
    rollupOptions: {
      input: {
        app: resolve(__dirname, 'src/local_deep_research/web/static/js/app.js'),
      },
      output: {
        // Consistent file naming
        entryFileNames: 'js/[name].[hash].js',
        chunkFileNames: 'js/[name].[hash].js',
        assetFileNames: (assetInfo) => {
          const name = assetInfo.names?.[0] ?? assetInfo.name ?? '';
          if (name.endsWith('.css')) {
            return 'css/[name].[hash][extname]';
          }
          if (/\.(?:woff2?|ttf|eot|svg)$/.test(name)) {
            return 'fonts/[name].[hash][extname]';
          }
          return 'assets/[name].[hash][extname]';
        }
      }
    },

    // Optimize chunks
    chunkSizeWarningLimit: 1000,
  },

  server: {
    // Development server settings
    port: 5173,
    strictPort: true,

    // Proxy API requests to Flask
    proxy: {
      '/api': {
        target: 'http://localhost:5000',
        changeOrigin: true,
      },
      '/socket.io': {
        target: 'http://localhost:5000',
        ws: true,
        changeOrigin: true,
      }
    }
  },

  resolve: {
    alias: {
      '@': resolve(__dirname, 'src/local_deep_research/web/static'),
      '@js': resolve(__dirname, 'src/local_deep_research/web/static/js'),
      '@css': resolve(__dirname, 'src/local_deep_research/web/static/css'),
    }
  },

  test: {
    environment: 'happy-dom',
    globals: true,
    root: resolve(__dirname),
    include: ['tests/js/**/*.test.js'],
    setupFiles: ['tests/js/setup.js'],
  }
});
