import os
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()


class Config:
    """Application configuration"""

    # Flask Configuration
    ENV = os.getenv('FLASK_ENV', 'production')
    DEBUG = os.getenv('FLASK_DEBUG', 'False') == 'True'
    HOST = os.getenv('FLASK_HOST', '0.0.0.0')
    PORT = int(os.getenv('FLASK_PORT', 8001))
    SECRET_KEY = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production')

    # Database Configuration (Primary - Post Call Analysis DB)
    DB_HOST = os.getenv('DB_HOST', '127.0.0.1')
    DB_PORT = int(os.getenv('DB_PORT', 3306))
    DB_USER = os.getenv('DB_USER', 'admin')
    DB_PASSWORD = os.getenv('DB_PASSWORD', 'mcube@admin123')
    DB_NAME = os.getenv('DB_NAME', 'voicebot_cluster')
    
    # Source Database Configuration (MCMube)
    SYNC_SOURCE_DB_HOST = os.getenv('SYNC_SOURCE_DB_HOST')
    SYNC_SOURCE_DB_PORT = int(os.getenv('SYNC_SOURCE_DB_PORT', 3306))
    SYNC_SOURCE_DB_USER = os.getenv('SYNC_SOURCE_DB_USER')
    SYNC_SOURCE_DB_PASSWORD = os.getenv('SYNC_SOURCE_DB_PASSWORD')
    SYNC_SOURCE_DB_NAME = os.getenv('SYNC_SOURCE_DB_NAME')

    # CORS Configuration
    CORS_ORIGINS = os.getenv(
        'CORS_ORIGINS',
        'http://localhost:6173,http://localhost:6174,http://localhost:3000,http://127.0.0.1:6174',
    ).split(',')

    # Pagination
    DEFAULT_PAGE_SIZE = int(os.getenv('DEFAULT_PAGE_SIZE', 100))
    MAX_PAGE_SIZE = int(os.getenv('MAX_PAGE_SIZE', 1000))

    # Logging
    LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO')
    LOG_FILE = os.getenv('LOG_FILE', 'dashboard_api.log')

    # API Rate Limiting (if needed)
    RATE_LIMIT_ENABLED = os.getenv('RATE_LIMIT_ENABLED', 'False') == 'True'
    RATE_LIMIT_DEFAULT = os.getenv('RATE_LIMIT_DEFAULT', '100 per minute')

    # Cache Configuration (if using Redis)
    CACHE_ENABLED = os.getenv('CACHE_ENABLED', 'False') == 'True'
    CACHE_TYPE = os.getenv('CACHE_TYPE', 'simple')
    CACHE_REDIS_HOST = os.getenv('CACHE_REDIS_HOST', 'localhost')
    CACHE_REDIS_PORT = int(os.getenv('CACHE_REDIS_PORT', 6379))
    CACHE_DEFAULT_TIMEOUT = int(os.getenv('CACHE_DEFAULT_TIMEOUT', 300))

    # Feature Flags
    ENABLE_WEBHOOKS = os.getenv('ENABLE_WEBHOOKS', 'True') == 'True'
    ENABLE_EXPORT = os.getenv('ENABLE_EXPORT', 'True') == 'True'
    ENABLE_ANALYTICS = os.getenv('ENABLE_ANALYTICS', 'True') == 'True'

    # AWS Configuration for Nova AI
    AWS_REGION = os.getenv('AWS_REGION', 'us-east-1')
    AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID', '')
    AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY', '')
    AWS_NOVA_MODEL = os.getenv('AWS_NOVA_MODEL', 'amazon.nova-lite-v1:0')
    RAG_CHAT_MODEL = os.getenv('RAG_CHAT_MODEL', AWS_NOVA_MODEL)
    RAG_CHAT_PROVIDER = os.getenv('RAG_CHAT_PROVIDER', 'bedrock')
    OLLAMA_BASE_URL = os.getenv('OLLAMA_BASE_URL', 'http://127.0.0.1:11434')
    OLLAMA_TIMEOUT_SECONDS = int(os.getenv('OLLAMA_TIMEOUT_SECONDS', 180))
    RAG_EMBEDDING_MODEL = os.getenv('RAG_EMBEDDING_MODEL', 'amazon.titan-embed-text-v2:0')
    RAG_TOP_K = int(os.getenv('RAG_TOP_K', 8))
    RAG_SIMILARITY_THRESHOLD = float(os.getenv('RAG_SIMILARITY_THRESHOLD', 0.2))
    RAG_MEMORY_MESSAGES = int(os.getenv('RAG_MEMORY_MESSAGES', 12))
    RAG_MAX_TOKENS = int(os.getenv('RAG_MAX_TOKENS', 600))
    RAG_TEMPERATURE = float(os.getenv('RAG_TEMPERATURE', 0.2))
    RAG_TOP_P = float(os.getenv('RAG_TOP_P', 0.9))
    RAG_USE_QDRANT = os.getenv('RAG_USE_QDRANT', 'True') == 'True'
    RAG_QDRANT_HOST = os.getenv('RAG_QDRANT_HOST', '127.0.0.1')
    RAG_QDRANT_PORT = int(os.getenv('RAG_QDRANT_PORT', 6333))
    RAG_QDRANT_COLLECTION_PREFIX = os.getenv('RAG_QDRANT_COLLECTION_PREFIX', 'rag_chunks_')
    RAG_QDRANT_API_KEY = os.getenv('RAG_QDRANT_API_KEY', '')
    RAG_QDRANT_HTTPS = os.getenv('RAG_QDRANT_HTTPS', 'False') == 'True'
    RAG_USE_REDIS_CACHE = os.getenv('RAG_USE_REDIS_CACHE', 'False') == 'True'
    RAG_EMBED_CACHE_TTL_SECONDS = int(os.getenv('RAG_EMBED_CACHE_TTL_SECONDS', 86400))
    RAG_RETRIEVAL_CACHE_TTL_SECONDS = int(os.getenv('RAG_RETRIEVAL_CACHE_TTL_SECONDS', 300))

    # STT Provider API Keys
    DEEPGRAM_API_KEY = os.getenv('DEEPGRAM_API_KEY', '')
    SARVAM_SUBSCRIPTION_KEY = os.getenv('SARVAM_SUBSCRIPTION_KEY', '')
    ANTHROPIC_API_KEY = os.getenv('ANTHROPIC_API_KEY', '')

    # Embed/Iframe Configuration
    EMBED_BASE_URL = os.getenv('EMBED_BASE_URL', 'http://localhost:6174')


class DevelopmentConfig(Config):
    """Development configuration"""
    ENV = 'development'
    DEBUG = True


class ProductionConfig(Config):
    """Production configuration"""
    ENV = 'production'
    DEBUG = False


class TestingConfig(Config):
    """Testing configuration"""
    ENV = 'testing'
    DEBUG = True
    TESTING = True


# Configuration dictionary
config = {
    'development': DevelopmentConfig,
    'production': ProductionConfig,
    'testing': TestingConfig,
    'default': DevelopmentConfig
}


def get_config(env=None):
    """Get configuration based on environment"""
    if env is None:
        env = os.getenv('FLASK_ENV', 'development')
    return config.get(env, config['default'])
