// Main configuration exports
export {
  initializeWcagConfig,
  getWcagConfig,
  getConfigValue,
  hasConfigValue,
} from './config-instance';

// Schema exports
export { wcagAppConfigSchema, type WcagAppConfig } from './schemas/wcag-app.schema';
export { scannerConfigSchema, type ScannerConfig } from './schemas/scanner.schema';
export { workerConfigSchema, type WorkerConfig } from './schemas/worker.schema';
export { featuresConfigSchema, type FeaturesConfig } from './schemas/features.schema';
export { providersConfigSchema, type ProvidersConfig } from './schemas/providers.schema';

// Helper functions
import { getWcagConfig } from './config-instance';
import type { ScannerConfig, WorkerConfig, FeaturesConfig, ProvidersConfig } from './schemas';

/**
 * Get scanner configuration
 */
export function getScannerConfig(): ScannerConfig {
  return getWcagConfig().scanner;
}

/**
 * Get worker configuration
 */
export function getWorkerConfig(): WorkerConfig {
  return getWcagConfig().worker;
}

/**
 * Get features configuration
 */
export function getFeaturesConfig(): FeaturesConfig {
  return getWcagConfig().features;
}

/**
 * Get providers configuration
 */
export function getProvidersConfig(): ProvidersConfig {
  return getWcagConfig().providers;
}

/**
 * Get service configuration
 */
export function getServiceConfig(service: 'api' | 'dashboard' | 'worker') {
  return getWcagConfig().services[service];
}

/**
 * Check if a feature is enabled
 */
export function isFeatureEnabled(feature: string): boolean {
  const features = getFeaturesConfig();
  const parts = feature.split('.');
  
  let current: any = features;
  for (const part of parts) {
    if (typeof current !== 'object' || !(part in current)) {
      return false;
    }
    current = current[part];
  }
  
  return current === true || (typeof current === 'object' && current.enabled === true);
}

/**
 * Get database configuration
 */
export function getDatabaseConfig() {
  return getWcagConfig().database;
}

/**
 * Get Redis configuration for queues
 */
export function getRedisConfig() {
  return getWcagConfig().worker.redis;
}

/**
 * Get storage configuration
 */
export function getStorageConfig() {
  return getWcagConfig().providers.storage;
}

/**
 * Get compliance configuration
 */
export function getComplianceConfig() {
  return getWcagConfig().compliance;
}

/**
 * Get subscription tier configuration
 */
export function getSubscriptionConfig(tier: 'starter' | 'professional' | 'enterprise') {
  return getWcagConfig().subscriptions.tiers[tier];
}