// Конфигурация окружения сервиса.
//
// Два источника, runtime имеет приоритет над build:
//   - DEV (npm run dev): Vite экспонирует в import.meta.env ТОЛЬКО переменные с
//     префиксом VITE_ — их читаем на этапе сборки (см. .env / .env.example).
//   - PROD (Docker): docker-entrypoint.d/20-nstart-runtime-config.sh генерит
//     /config.js из APP_*-переменных контейнера → window.__NSTART_APP_ENV__.
//     Это прод-контракт; .env в проде не используется.
//
// У ТГУ собственная тёмная тема на :root (styles/theme.css), переключателя тем
// нет — поэтому параметра темы здесь намеренно нет (в отличие от nstart-шаблона,
// где тема нужна была только чтобы бороться со светлым дефолтом @nstart/ui).

export type AuthMode = 'new-start-id' | 'anonymous'

export interface AppEnv {
  apiUrl: string
  authMode: AuthMode
  newStartIdUrl: string
  newStartIdRealm: string
  newStartIdClientId: string
}

interface RuntimeEnv {
  apiUrl?: string
  authMode?: string
  newStartIdUrl?: string
  newStartIdRealm?: string
  newStartIdClientId?: string
}

declare global {
  interface Window {
    __NSTART_APP_ENV__?: RuntimeEnv
  }
}

/** Берёт первое непустое значение из runtime → build → default. */
function pick(runtime: string | undefined, build: string | undefined, fallback: string): string {
  const r = runtime?.trim()
  if (r) return r
  const b = build?.trim()
  if (b) return b
  return fallback
}

function resolveAuthMode(value: string): AuthMode {
  return value === 'new-start-id' ? 'new-start-id' : 'anonymous'
}

function resolveEnv(): AppEnv {
  const runtime = window.__NSTART_APP_ENV__ ?? {}
  const build = import.meta.env

  return {
    apiUrl: pick(runtime.apiUrl, build.VITE_API_URL, '/api'),
    // Дефолт anonymous: сервис открывается сразу, без редиректа на Keycloak.
    // Закрытый контур включается явно (APP_AUTH_MODE / VITE_AUTH_MODE=new-start-id).
    authMode: resolveAuthMode(pick(runtime.authMode, build.VITE_AUTH_MODE, 'anonymous')),
    newStartIdUrl: pick(
      runtime.newStartIdUrl,
      build.VITE_NEW_START_ID_URL,
      'http://localhost:8080/auth',
    ),
    newStartIdRealm: pick(runtime.newStartIdRealm, build.VITE_NEW_START_ID_REALM, 'new-start'),
    newStartIdClientId: pick(
      runtime.newStartIdClientId,
      build.VITE_NEW_START_ID_CLIENT_ID,
      'pcp-tgu-ui-service',
    ),
  }
}

export const env: AppEnv = resolveEnv()
