import { defineConfig, loadEnv } from 'vite';
import react from '@vitejs/plugin-react';

// Vite-конфиг плеера Рублокса.
//
// - порт 5173 фиксирован (код плеера и внешние ссылки на него рассчитывают)
// - outDir 'build' (деплоится в nginx /var/www/rublox-player/build/)
// - manualChunks выносят babylon/colyseus в отдельные чанки
//   (движок ~46к строк, single-bundle >5 МБ; браузер парсит дольше)
// - define для process.env.NODE_ENV — шим для engine-кода, который
//   использовал CRA-провайденный глобал
// - dev-proxy по умолчанию ходит на staging; переопределяй через
//   VITE_API_PROXY_TARGET в .env.development.local чтобы указать свой бэкенд.
export default defineConfig(({ mode }) => {
  // Грузим env чтобы взять VITE_API_PROXY_TARGET для proxy-конфига.
  const env = loadEnv(mode, process.cwd(), '');
  const PROXY_TARGET = env.VITE_API_PROXY_TARGET || 'https://dev-api.rublox.pro';

  // Все префиксы бэкенда с которыми общается плеер.
  // Каждая запись создаёт Vite-proxy: /api-X/* → ${PROXY_TARGET}/api-X/*
  const proxyPrefixes = ['/api-user', '/api-storys', '/api-game'];
  const proxy = Object.fromEntries(
    proxyPrefixes.map((p) => [
      p,
      { target: PROXY_TARGET, changeOrigin: true, secure: true, ws: true },
    ])
  );

  return {
    plugins: [react()],
    server: {
      // Явно биндим IPv4 — Vite по умолчанию слушает [::1] на Windows,
      // что ломает IPv4-localhost (ECONNREFUSED от curl/браузера).
      host: '127.0.0.1',
      port: 5173,
      strictPort: true,
      proxy,
    },
    build: {
      outDir: 'build',
      sourcemap: false,
      rollupOptions: {
        output: {
          manualChunks: {
            babylon: ['@babylonjs/core', '@babylonjs/loaders'],
            colyseus: ['colyseus.js'],
          },
        },
      },
    },
    define: {
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
    },
  };
});
