import os
from typing import List, Optional
from dotenv import load_dotenv
load_dotenv()
class Config:
    """
    Configuration class that handles all application settings.
    Follows SRP by being responsible only for configuration management.
    """
    COMPANY_NAME: str = os.getenv('COMPANY_NAME', 'Mcube Telecom pvt Limited')
    PORT: int = int(os.getenv('PORT', 7900))  
    # Mcube Call Service Configuration
    MCUBE_WEBSOCKET_URL: str = os.getenv('MCUBE_WEBSOCKET_URL', 'ws://10.0.0.109:7900/ws/testsession_1754994722754')
    MCUBE_WEBSOCKET_BASE_URL: str = os.getenv('MCUBE_WEBSOCKET_BASE_URL', 'ws://10.0.0.109:7900/ws/')
    MCUBE_AUDIO_FORMAT: str = 'audio/x-mulaw'
    MCUBE_SAMPLE_RATE: int = int(os.getenv('MCUBE_SAMPLE_RATE', '8000'))  # Supports both 8000 and 16000 Hz μ-law (default: 8000 Hz) 
    # Agent Transfer Configuration
    AGENT_PHONE_NUMBER: str = os.getenv('AGENT_PHONE_NUMBER', '7780787875')  # Default agent number
    # ElevenLabs TTS Configuration
    ELEVENLABS_API_KEY: str = os.getenv('ELEVENLABS_API_KEY', '9949533918874a9b32624810f7357ffc6abf6127f96adbd2648db174e79162fa')
    ELEVENLABS_VOICE_ID: str = os.getenv('ELEVENLABS_VOICE_ID', 'tyOTyLYwi6G1V4rsb6uy')  # Default voice ID
    ELEVENLABS_MODEL_ID: str = os.getenv('ELEVENLABS_MODEL_ID', 'eleven_turbo_v2')
    # ELEVENLABS_AGENT_ID: str = os.getenv('ELEVENLABS_AGENT_ID', 'agent_2701kc2477fze9bsckrh4q0axy7t')  # Agent ID for Conversational AI
    ELEVENLABS_AGENT_ID: str = os.getenv('ELEVENLABS_AGENT_ID', 'agent_7201ker9r8q2f5z8m6b4bbp58b8f')

    SHOW_TIMING_MATH: bool = False
 
    DATABASE_HOST: str = os.getenv('DATABASE_HOST', '10.40.180.74')
    DATABASE_NAME: str = os.getenv('DATABASE_NAME', 'mainvoicebot_cluster')
    DATABASE_USER: str = os.getenv('DATABASE_USER', 'admin')
    DATABASE_PASSWORD: str = os.getenv('DATABASE_PASSWORD', 'Syntheon@1982')
    DATABASE_CHARSET: str = os.getenv('DATABASE_CHARSET', 'utf8mb4')

    @classmethod
    def has_mcube_config(cls) -> bool:
        """Return True if Mcube configuration is available."""
        return bool(cls.MCUBE_WEBSOCKET_URL)
    
    @classmethod
    def validate_required_config(cls) -> None:
        """Validate that required configuration is present."""
        required_vars = [
            'ELEVENLABS_API_KEY',
            'ELEVENLABS_AGENT_ID',
            'MCUBE_WEBSOCKET_URL',
        ]
        missing = []
        for var in required_vars:
            if not getattr(cls, var, None):
                missing.append(var)
        if missing:
            raise ValueError(f"Missing required config variables: {', '.join(missing)}")

# Initialize and validate configuration when module is imported
Config.validate_required_config()
