/**
 * Centralised, typed access to environment configuration.
 * Server-only — never import this from a Client Component.
 */

export const env = {
  get demoMode(): boolean {
    // Default to demo mode when unset, so a fresh clone runs immediately.
    return (process.env.DEMO_MODE ?? 'true').toLowerCase() !== 'false';
  },
  /**
   * AI-specific demo flag, decoupled from DEMO_MODE. Lets you keep bdapps in
   * demo (no real OTP creds) while using a real AI provider — set AI_DEMO=false
   * and provide AI_API_KEY. Defaults to DEMO_MODE when unset.
   */
  get aiDemo(): boolean {
    if (process.env.AI_DEMO !== undefined) {
      return process.env.AI_DEMO.toLowerCase() !== 'false';
    }
    return this.demoMode;
  },
  get bdappsAppId(): string {
    return process.env.BDAPPS_APP_ID ?? '';
  },
  get bdappsPassword(): string {
    return process.env.BDAPPS_PASSWORD ?? '';
  },
  get bdappsBaseUrl(): string {
    return (process.env.BDAPPS_BASE_URL ?? 'https://developer.bdapps.com').replace(/\/$/, '');
  },
  get aiApiKey(): string {
    return process.env.AI_API_KEY ?? '';
  },
  get aiProvider(): 'anthropic' | 'openai' {
    return (process.env.AI_PROVIDER ?? 'anthropic').toLowerCase() === 'openai'
      ? 'openai'
      : 'anthropic';
  },
  get aiModel(): string {
    if (process.env.AI_MODEL) return process.env.AI_MODEL;
    return this.aiProvider === 'openai' ? 'gpt-4o-mini' : 'claude-sonnet-5';
  },
  get sessionSecret(): string {
    return process.env.SESSION_SECRET ?? 'wonderkids_insecure_dev_secret';
  },
  get databasePath(): string | undefined {
    return process.env.DATABASE_PATH || undefined;
  },
};

/** Whether real AI generation is possible (key present and AI demo off). */
export function canUseAi(): boolean {
  return !env.aiDemo && env.aiApiKey.length > 0;
}

/** Whether real bdapps calls should be made. */
export function canUseBdapps(): boolean {
  return !env.demoMode && env.bdappsAppId.length > 0 && env.bdappsPassword.length > 0;
}
