import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import { NodeGlobalsPolyfillPlugin } from '@esbuild-plugins/node-globals-polyfill';
import { NodeModulesPolyfillPlugin } from '@esbuild-plugins/node-modules-polyfill';
import path from 'path';

export default defineConfig(({ mode }) => {
    // Lade Umgebungsvariablen explizit
    const env = loadEnv(mode, process.cwd(), '');
    // Kombiniere mit process.env, um auch Shell-Umgebungsvariablen zu berücksichtigen
    const combinedEnv = { ...env, ...process.env };
    
    return {
        plugins: [vue()],
        define: {
            // Explizit Produktionsumgebung setzen
            __DEV__: false,
            'import.meta.env.DEV': false,
            'import.meta.env.PROD': true,
            'import.meta.env.MODE': '"production"',
            // Stelle sicher, dass Umgebungsvariablen aus .env.production oder Shell-Umgebung geladen werden
            ...(combinedEnv.VITE_DAEMON_SOCKET && {
                'import.meta.env.VITE_DAEMON_SOCKET': JSON.stringify(combinedEnv.VITE_DAEMON_SOCKET)
            }),
            ...(combinedEnv.VITE_API_BASE_URL && {
                'import.meta.env.VITE_API_BASE_URL': JSON.stringify(combinedEnv.VITE_API_BASE_URL)
            }),
            ...(combinedEnv.VITE_CHAT_WS_URL && {
                'import.meta.env.VITE_CHAT_WS_URL': JSON.stringify(combinedEnv.VITE_CHAT_WS_URL)
            }),
            ...(combinedEnv.VITE_SOCKET_IO_URL && {
                'import.meta.env.VITE_SOCKET_IO_URL': JSON.stringify(combinedEnv.VITE_SOCKET_IO_URL)
            })
        },
        optimizeDeps: {
        esbuildOptions: {
            plugins: [
                NodeGlobalsPolyfillPlugin({
                    buffer: true
                }),
                NodeModulesPolyfillPlugin()
            ]
        }
    },
        resolve: {
            alias: {
                '@': path.resolve(__dirname, './src'),
                stream: 'stream-browserify',
                util: 'util',
                assert: 'assert',
            }
        },
    };
});
