"""
Factory for creating transcription adapters
"""

import os
from typing import Optional

from ..interfaces.transcriber import ITranscriber
from ..utils.config import AudioProcessingConfig
from ..utils.errors import ConfigurationError
from .local_adapter import LocalTranscriptionAdapter
from .modal_adapter import ModalTranscriptionAdapter


class TranscriptionAdapterFactory:
    """Factory for creating appropriate transcription adapters"""
    
    @staticmethod
    def create_adapter(
        deployment_mode: str = "auto",
        config: Optional[AudioProcessingConfig] = None,
        endpoint_url: Optional[str] = None
    ) -> ITranscriber:
        """
        Create transcription adapter based on deployment mode
        
        Args:
            deployment_mode: "local", "modal", or "auto"
            config: Configuration object
            endpoint_url: Modal endpoint URL (for modal/auto mode)
            
        Returns:
            ITranscriber: Appropriate transcription adapter
        """
        
        config = config or AudioProcessingConfig()
        
        # Auto mode: decide based on environment and endpoint availability
        if deployment_mode == "auto":
            if endpoint_url:
                print(f"🌐 Auto mode: Using Modal adapter with endpoint {endpoint_url}")
                return ModalTranscriptionAdapter(config=config, endpoint_url=endpoint_url)
            else:
                print(f"🏠 Auto mode: Using Local adapter (no endpoint configured)")
                return LocalTranscriptionAdapter(config=config)
        
        # Explicit local mode
        elif deployment_mode == "local":
            print(f"🏠 Using Local transcription adapter")
            return LocalTranscriptionAdapter(config=config)
        
        # Explicit modal mode  
        elif deployment_mode == "modal":
            if not endpoint_url:
                raise ConfigurationError(
                    "Modal endpoint URL is required for modal mode",
                    config_key="endpoint_url"
                )
            print(f"🌐 Using Modal transcription adapter with endpoint {endpoint_url}")
            return ModalTranscriptionAdapter(config=config, endpoint_url=endpoint_url)
        
        else:
            raise ConfigurationError(
                f"Unsupported deployment mode: {deployment_mode}. Use 'local', 'modal', or 'auto'",
                config_key="deployment_mode"
            )
    
    @staticmethod
    def _detect_deployment_mode() -> str:
        """Auto-detect deployment mode based on environment"""
        import os
        
        # Check if running in Modal environment
        if os.environ.get("MODAL_TASK_ID"):
            return "local"  # We're inside Modal, use local processing
        else:
            return "modal"  # We're outside Modal, use remote endpoint