"""
Configuration module for Wakelai Voice AI SaaS Platform
"""
import os
from datetime import timedelta
from dotenv import load_dotenv

# Load environment variables
load_dotenv()

class Config:
    """Base configuration"""

    # Flask
    SECRET_KEY = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production')
    DEBUG = os.getenv('DEBUG', 'True') == 'True'

    # Database
    SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL', 'postgresql://postgres@127.0.0.1:5432/wakelai')
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ECHO = DEBUG

    # Redis
    REDIS_URL = os.getenv('REDIS_URL', 'redis://127.0.0.1:6379/0')

    # Server
    SERVER_HOST = os.getenv('SERVER_HOST', '0.0.0.0')
    SERVER_PORT = int(os.getenv('SERVER_PORT', 4000))
    BASE_URL = os.getenv('BASE_URL', 'http://localhost:4000')

    # Multi-Tenant
    TENANT_ISOLATION = os.getenv('TENANT_ISOLATION', 'schema')
    INSTANCE_BASE_PORT = int(os.getenv('INSTANCE_BASE_PORT', 4500))
    MAX_INSTANCES_PER_USER = int(os.getenv('MAX_INSTANCES_PER_USER', 10))
    FREE_PLAN_INSTANCE_LIMIT = int(os.getenv('FREE_PLAN_INSTANCE_LIMIT', 1))
    PRO_PLAN_INSTANCE_LIMIT = int(os.getenv('PRO_PLAN_INSTANCE_LIMIT', 3))
    SCALE_PLAN_INSTANCE_LIMIT = int(os.getenv('SCALE_PLAN_INSTANCE_LIMIT', 10))

    # Google OAuth
    GOOGLE_CLIENT_ID = os.getenv('GOOGLE_CLIENT_ID')
    GOOGLE_CLIENT_SECRET = os.getenv('GOOGLE_CLIENT_SECRET')
    GOOGLE_REDIRECT_URI = os.getenv('GOOGLE_REDIRECT_URI', f'{BASE_URL}/auth/google/callback')

    # OpenVoiceUI
    OPENVOICEUI_INSTALL_PATH = os.getenv('OPENVOICEUI_INSTALL_PATH')
    OPENVOICEUI_BASE_URL = os.getenv('OPENVOICEUI_BASE_URL', 'http://localhost:5001')

    # LLM
    CLAWDBOT_AUTH_TOKEN = os.getenv('CLAWDBOT_AUTH_TOKEN')
    ANTHROPIC_API_KEY = os.getenv('ANTHROPIC_API_KEY')
    DEFAULT_LLM_PROVIDER = os.getenv('DEFAULT_LLM_PROVIDER', 'anthropic')

    # TTS/STT
    TTS_PROVIDER = os.getenv('TTS_PROVIDER', 'supertonic')
    GROQ_API_KEY = os.getenv('GROQ_API_KEY')
    ELEVENLABS_API_KEY = os.getenv('ELEVENLABS_API_KEY')
    STT_PROVIDER = os.getenv('STT_PROVIDER', 'web_speech')
    DEEPGRAM_API_KEY = os.getenv('DEEPGRAM_API_KEY')

    # Celery
    CELERY_BROKER_URL = os.getenv('CELERY_BROKER_URL', 'redis://127.0.0.1:6379/1')
    CELERY_RESULT_BACKEND = os.getenv('CELERY_RESULT_BACKEND', 'redis://127.0.0.1:6379/2')

    # Rate Limiting
    RATELIMIT_STORAGE_URL = os.getenv('RATELIMIT_STORAGE_URL', 'redis://127.0.0.1:6379/3')
    RATELIMIT_DEFAULT = os.getenv('RATELIMIT_DEFAULT', '100/hour')

    # Session
    PERMANENT_SESSION_LIFETIME = timedelta(days=7)
    SESSION_COOKIE_SECURE = not DEBUG
    SESSION_COOKIE_HTTPONLY = True
    SESSION_COOKIE_SAMESITE = 'Lax'

    # Upload
    MAX_CONTENT_LENGTH = 16 * 1024 * 1024  # 16MB
    UPLOAD_FOLDER = os.path.join(os.path.dirname(__file__), '..', 'uploads')

    # Logging
    LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO')
    LOG_FILE = os.getenv('LOG_FILE', 'logs/wakelai.log')

    # Stripe
    STRIPE_API_KEY = os.getenv('STRIPE_API_KEY')
    STRIPE_WEBHOOK_SECRET = os.getenv('STRIPE_WEBHOOK_SECRET')

    # Admin
    ADMIN_USERNAME = os.getenv('ADMIN_USERNAME', 'admin')
    ADMIN_PASSWORD = os.getenv('ADMIN_PASSWORD')


class DevelopmentConfig(Config):
    """Development configuration"""
    DEBUG = True
    TESTING = False


class ProductionConfig(Config):
    """Production configuration"""
    DEBUG = False
    TESTING = False
    SESSION_COOKIE_SECURE = True


class TestingConfig(Config):
    """Testing configuration"""
    TESTING = True
    SQLALCHEMY_DATABASE_URI = 'postgresql://postgres@127.0.0.1:5432/wakelai_test'
    WTF_CSRF_ENABLED = False


config_by_name = {
    'development': DevelopmentConfig,
    'production': ProductionConfig,
    'testing': TestingConfig
}


def get_config(env_name='development'):
    """Get configuration by environment name"""
    return config_by_name.get(env_name, DevelopmentConfig)
