import { resolve } from 'node:path';
import { defineConfig } from 'vite';
import { svelte } from '@sveltejs/vite-plugin-svelte';

// The edge Connect service is scrabble.edge.v1.Gateway; the gateway serves it over
// h2c on :8081 by default. In dev we proxy the RPC path so the browser (which can
// not speak h2c directly) talks to the dev server on the same origin. In `mock`
// mode the app runs entirely against an in-memory fake transport — no gateway,
// no backend, no Postgres — which is what `pnpm start` launches.
const RPC_PREFIX = '/scrabble.edge.v1.Gateway';

export default defineConfig(({ mode }) => ({
  // Relative asset base so the one build serves under any path — the gateway maps the
  // Telegram Mini App to /telegram/ (the hash router is path-agnostic).
  base: './',
  define: {
    // App version shown on the About screen, injected at build time from `git describe`
    // via a Docker build-arg. Falls back to "dev" for a plain local/mock build,
    // so a missing build-arg never breaks the build.
    __APP_VERSION__: JSON.stringify(process.env.VITE_APP_VERSION || 'dev'),
  },
  plugins: [svelte()],
  server: {
    port: 5173,
    proxy:
      mode === 'mock'
        ? undefined
        : {
            [RPC_PREFIX]: {
              target: process.env.GATEWAY_URL || 'http://localhost:8081',
              changeOrigin: true,
            },
          },
  },
  build: {
    target: 'es2022',
    sourcemap: true,
    // Two entries: the game SPA (index.html, served at /app/ + /telegram/) and the
    // public landing page (landing.html, served at /). Assets are shared in dist/assets/, and
    // the relative base lets one build serve under any path.
    rollupOptions: {
      input: {
        main: resolve(import.meta.dirname, 'index.html'),
        landing: resolve(import.meta.dirname, 'landing.html'),
      },
    },
  },
}));
