import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'node:path';
import fs from 'node:fs';
import { fileURLToPath } from 'node:url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));
const rootDir = path.resolve(__dirname, '..');

export default defineConfig({
  plugins: [react()],
  root: '.',
  publicDir: 'public',
  server: {
    port: 5174,
    host: '0.0.0.0',
    https: (() => {
      const keyPath = path.join(rootDir, 'ssl', 'code-dev.g4dge7.com.key');
      const certPath = path.join(rootDir, 'ssl', 'code-dev.g4dge7.com.crt');
      if (fs.existsSync(keyPath) && fs.existsSync(certPath)) {
        return {
          key: fs.readFileSync(keyPath),
          cert: fs.readFileSync(certPath),
        };
      }
      return undefined;
    })(),
    hmr: {
      host: 'code-dev.g4dge7.com',
      port: 5174,
      protocol: 'wss',
    },
    proxy: {
      '/auth': {
        target: 'http://localhost:3443',
        changeOrigin: true,
        cookieDomainRewrite: {
          '': 'code-dev.g4dge7.com',
        },
      },
      '/api': {
        target: 'http://localhost:3443',
        changeOrigin: true,
        cookieDomainRewrite: {
          '': 'code-dev.g4dge7.com',
        },
      },
      '/socket.io': {
        target: 'http://localhost:3443',
        ws: true,
      },
    },
  },
  build: {
    outDir: path.join(rootDir, 'dist', 'client'),
    emptyOutDir: true,
    rolldownOptions: {
      output: {
        codeSplitting: {
          minSize: 20000,
          groups: [
            {
              name: 'vendor',
              test: /[\\/]node_modules[\\/]/,
              priority: 10,
              maxSize: 250000,
            },
          ],
        },
      },
    },
  },
  resolve: {
    alias: {
      '@': path.join(rootDir, 'src'),
    },
  },
});