import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { ZOOM_ANALYTICS_ENV_KEYS, ZOOM_ANALYTICS_DEFAULTS } from '../constants/zoom-analytics.constants';

/**
 * Config-driven feature flags/secrets for the Zoom analytics feature. Every
 * consumer (facade, webhook service, schedulers) asks this service, never
 * ConfigService directly, so there is exactly one spot to change if a config
 * key or validation rule ever changes. Which resource-type provider to use
 * is NOT config-driven — it's resolved per-session/per-webhook-event via
 * ZoomAnalyticsProviderRegistry, since a single deployment runs both webinar
 * and meeting sessions at once.
 */
@Injectable()
export class ZoomAnalyticsConfigService {
  constructor(private readonly configService: ConfigService) {}

  isEnabled(): boolean {
    return this.configService.get<string>(ZOOM_ANALYTICS_ENV_KEYS.ENABLE) === 'true';
  }

  isLivePollEnabled(): boolean {
    return this.configService.get<string>(ZOOM_ANALYTICS_ENV_KEYS.ENABLE_LIVE_POLL) === 'true';
  }

  getWebhookSecret(): string {
    return this.configService.get<string>(ZOOM_ANALYTICS_ENV_KEYS.WEBHOOK_SECRET_TOKEN) ?? '';
  }

  /** How many seconds after the scheduled start a first join counts as "late" — tunable without a code change. */
  getLateJoinThresholdSeconds(): number {
    const raw = this.configService.get<string>(ZOOM_ANALYTICS_ENV_KEYS.LATE_JOIN_THRESHOLD_SECONDS);
    const parsed = raw ? parseInt(raw, 10) : NaN;
    return Number.isFinite(parsed) && parsed > 0 ? parsed : ZOOM_ANALYTICS_DEFAULTS.LATE_JOIN_THRESHOLD_SECONDS;
  }
}
