from pydantic_settings import BaseSettings
from typing import List, Optional, Union
from functools import lru_cache
import os


class Settings(BaseSettings):
    # تنظیمات برنامه
    PROJECT_NAME: str = "دستیار هوش مصنوعی مستقل"
    VERSION: str = "2.0.0"
    DEBUG: bool = True
    ENVIRONMENT: str = "development"
    
    # تنظیمات امنیتی
    SECRET_KEY: str = "your-secret-key-change-in-production"
    ALGORITHM: str = "HS256"
    ACCESS_TOKEN_EXPIRE_MINUTES: int = 1440
    REFRESH_TOKEN_EXPIRE_DAYS: int = 7
    
    # تنظیمات دامنه
    DOMAIN: str = "assistant.zpir.ir"
    BACKEND_CORS_ORIGINS: List[str] = [
        "http://localhost:3000",
        "http://localhost:8000",
        "https://assistant.zpir.ir",
        "https://zpir.ir"
    ]
    
    # تنظیمات MySQL
    DATABASE_URL: str = "mysql://app_user:app_password123@mysql:3306/ai_assistant"
    REDIS_URL: str = "redis://redis:6379/0"
    
    # تنظیمات Celery
    CELERY_BROKER_URL: str = "redis://redis:6379/0"
    CELERY_RESULT_BACKEND: str = "redis://redis:6379/0"
    
    # تنظیمات ایمیل
    SMTP_SERVER: Optional[str] = None
    SMTP_PORT: Optional[int] = None
    SMTP_USERNAME: Optional[str] = None
    SMTP_PASSWORD: Optional[str] = None
    EMAILS_FROM_EMAIL: Optional[str] = None
    
    # تنظیمات امنیتی پیشرفته
    MAX_LOGIN_ATTEMPTS: int = 5
    ACCOUNT_LOCKOUT_MINUTES: int = 30
    SESSION_TIMEOUT_MINUTES: int = 60
    
    # تنظیمات سیستم
    MAX_CONCURRENT_TASKS_PER_USER: int = 3
    MAX_TASK_DURATION_SECONDS: int = 300
    MAX_FILE_SIZE_MB: int = 100  # حداکثر حجم فایل آپلودی
    TASK_QUEUE_LIMIT: int = 10   # حداکثر تسک در صف
    
    # مسیرهای ذخیره‌سازی
    UPLOAD_DIR: str = "/app/uploads"
    TEMP_DIR: str = "/app/temp"
    SCREENSHOTS_DIR: str = "/app/temp/screenshots"
    RESULTS_DIR: str = "/app/temp/results"
    
    # تنظیمات پاکسازی
    CLEANUP_INTERVAL_HOURS: int = 2  # هر 2 ساعت
    TEMP_FILE_MAX_AGE_HOURS: int = 2  # حداکثر عمر فایل موقت
    
    # API Keys
    DEEPSEEK_API_KEY: Optional[str] = None
    OPENAI_API_KEY: Optional[str] = None
    
    # تنظیمات Web Scraping
    MAX_SCRAPING_DEPTH: int = 3
    SCRAPING_TIMEOUT: int = 30
    
    # تنظیمات Desktop Control
    ALLOW_REMOTE_CONTROL: bool = False
    DESKTOP_CONTROL_TIMEOUT: int = 60
    
    class Config:
        env_file = ".env"
        case_sensitive = True


@lru_cache()
def get_settings() -> Settings:
    return Settings()


settings = get_settings()
