import react from '@vitejs/plugin-react';
import { fileURLToPath, URL } from 'node:url';
import { defineConfig, type UserConfig } from 'vite';

/**
 * Funktionsform, damit ein Produktionsbau (Gitea-Runner) nichts vom
 * Entwicklungsserver anfasst. Der Bau erzeugt ausschliesslich statische
 * Dateien; auf dem Zielsystem laeuft kein Node.
 */
export default defineConfig(({ command }) => {
    const config: UserConfig = {
        plugins: [react()],
        resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } },
        build: {
            outDir: 'dist',
            // Quellkarten bleiben aus: das Buendel liegt auf einem erreichbaren
            // nginx und soll den Quelltext nicht mitliefern.
            sourcemap: false,
            target: 'es2022',
            rollupOptions: {
                output: {
                    // React getrennt halten, damit ein Oberflaechen-Update nicht
                    // den gesamten Cache der Anwender entwertet.
                    manualChunks: { react: ['react', 'react-dom'] },
                },
            },
        },
    };

    // Ab hier nur noch Entwicklungsserver. Ein `vite build` erreicht diese
    // Zeilen nie und braucht deshalb weder Proxy noch laufendes Backend.
    if (command !== 'serve') return config;

    config.server = {
        port: 5173,
        strictPort: true,
        proxy: {
            // Im Betrieb macht das nginx. Lokal zeigt der Proxy auf
            // `php -S 127.0.0.1:8080 -t backend/public`.
            '/api': {
                target: process.env.EKDOS_BACKEND ?? 'http://127.0.0.1:8080',
                changeOrigin: false,
            },
        },
    };

    return config;
});
