# ================================================================
# SHARED CONFIGURATION UTILITIES
# shared/config/utils.py
# ================================================================

"""
Configuration utilities and helpers
"""

from typing import Dict, Any, Type
from shared.config.base import BaseServiceSettings

# Service settings registry
SERVICE_SETTINGS: Dict[str, Type[BaseServiceSettings]] = {
    "gateway": GatewaySettings,
    "auth-service": AuthSettings,
    "training-service": TrainingSettings,
    "forecasting-service": ForecastingSettings,
    "data-service": DataSettings,
    "tenant-service": TenantSettings,
    "notification-service": NotificationSettings,
}

def get_settings_for_service(service_name: str) -> BaseServiceSettings:
    """
    Get settings instance for a specific service
    
    Args:
        service_name: Name of the service
        
    Returns:
        BaseServiceSettings: Configured settings instance
        
    Raises:
        ValueError: If service name is not recognized
    """
    if service_name not in SERVICE_SETTINGS:
        raise ValueError(f"Unknown service: {service_name}. Available: {list(SERVICE_SETTINGS.keys())}")
    
    settings_class = SERVICE_SETTINGS[service_name]
    return settings_class()

def validate_all_service_configs() -> Dict[str, Any]:
    """
    Validate configuration for all services
    
    Returns:
        Dict: Validation results for each service
    """
    results = {}
    
    for service_name, settings_class in SERVICE_SETTINGS.items():
        try:
            settings = settings_class()
            results[service_name] = {
                "status": "valid",
                "config": {
                    "app_name": settings.APP_NAME,
                    "version": settings.VERSION,
                    "environment": settings.ENVIRONMENT,
                    "database_configured": bool(settings.DATABASE_URL),
                    "redis_configured": bool(settings.REDIS_URL),
                    "debug_mode": settings.DEBUG,
                }
            }
        except Exception as e:
            results[service_name] = {
                "status": "error",
                "error": str(e)
            }
    
    return results

def get_service_urls() -> Dict[str, str]:
    """
    Get all service URLs from any service configuration
    
    Returns:
        Dict: Service name to URL mapping
    """
    # Use auth service settings as reference (all services have same URLs)
    settings = AuthSettings()
    return settings.SERVICE_REGISTRY
