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

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

  // Префиксы которые проксируем на бэкенд.
  // Для prod-target (minecraftia-school.ru) — режем напрямую на S2 IP (85.175.6.22),
  // т.к. на S1 user-service остался старый JWT_SECRET после ротации 2026-06-04,
  // и токены выданные S2 на S1 не валидируются.
  const proxyPrefixes = ['/api-user', '/api-storys', '/api-game'];
  const isProdTarget = PROXY_TARGET.includes('minecraftia-school.ru');
  const proxyOpts = {
    target: PROXY_TARGET,
    changeOrigin: true,
    secure: true,
    ws: true,
  };
  const proxy = Object.fromEntries(proxyPrefixes.map((p) => [p, proxyOpts]));
  // /api-rbxl — отдельный target (VM 130 rbxl-importer на S1).
  // В dev: ходим напрямую через CF DNS (proxied=false → 85.175.7.40 → NPM → VM 130).
  proxy['/api-rbxl'] = {
    target: env.VITE_RBXL_PROXY_TARGET || 'http://api-rbxl.rublox.pro',
    changeOrigin: true,
    secure: false,
    rewrite: (path) => path.replace(/^\/api-rbxl/, ''),
  };
  // Вся статика (kubikon-assets, assets, wiki, dev-*.json) лежит в public/ —
  // vite сама отдаёт. Никаких proxy не нужно. См. setup-public.ps1 если папок нет.

  return {
    plugins: [react()],
    server: {
      host: '127.0.0.1',
      port: 5174,
      strictPort: true,
      proxy,
    },
    build: {
      outDir: 'build',
      sourcemap: false,
      rollupOptions: {
        output: {
          manualChunks: {
            babylon: ['@babylonjs/core', '@babylonjs/loaders'],
            monaco: ['@monaco-editor/react'],
            colyseus: ['colyseus.js'],
          },
        },
      },
    },
    define: {
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
    },
  };
});
