type AppEnv = {
  isProduction: boolean;
  apiBaseUrl: string;
  apiTimeoutMs: number;
  reverb: {
    key?: string;
    host?: string;
    port?: string;
    scheme?: string;
  };
};

function readEnvString(key: keyof ImportMetaEnv): string | undefined {
  const value = import.meta.env[key];
  return typeof value === 'string' && value.length > 0 ? value : undefined;
}

export function validateClientEnv(): AppEnv {
  const isProduction = import.meta.env.PROD;

  const reverbKey = readEnvString('VITE_REVERB_APP_KEY');
  if (isProduction && !reverbKey) {
    console.warn('[mvhelpdesk] VITE_REVERB_APP_KEY is not set; realtime features are disabled.');
  }

  return {
    isProduction,
    apiBaseUrl: '/api/v1',
    apiTimeoutMs: Number(import.meta.env.VITE_API_TIMEOUT_MS ?? 30_000),
    reverb: {
      key: reverbKey,
      host: readEnvString('VITE_REVERB_HOST'),
      port: readEnvString('VITE_REVERB_PORT'),
      scheme: readEnvString('VITE_REVERB_SCHEME'),
    },
  };
}

export const appEnv = validateClientEnv();
