from pydantic_settings import BaseSettings
from pydantic import Field
from typing import Optional


class Settings(BaseSettings):
    # === AI Keys ===
    anthropic_api_key: str = Field(default="", env="ANTHROPIC_API_KEY")
    openai_api_key: str = Field(default="", env="OPENAI_API_KEY")
    google_api_key: str = Field(default="", env="GOOGLE_API_KEY")
    deepseek_api_key: str = Field(default="", env="DEEPSEEK_API_KEY")

    # === Default Executor ===
    default_executor: str = Field(default="claude", env="DEFAULT_EXECUTOR")

    # === Database ===
    database_url: str = Field(
        default="postgresql+asyncpg://postgres:password@localhost:5432/ai_engineering",
        env="DATABASE_URL",
    )
    database_pool_size: int = Field(default=10, env="DATABASE_POOL_SIZE")

    # === Redis / Queue ===
    redis_url: str = Field(default="redis://localhost:6379/0", env="REDIS_URL")
    celery_broker_url: str = Field(default="redis://localhost:6379/0", env="CELERY_BROKER_URL")
    celery_result_backend: str = Field(default="redis://localhost:6379/1", env="CELERY_RESULT_BACKEND")

    # === Sandbox ===
    sandbox_base_dir: str = Field(default="./sandboxes", env="SANDBOX_BASE_DIR")
    sandbox_max_concurrent: int = Field(default=5, env="SANDBOX_MAX_CONCURRENT")

    # === Git ===
    git_user_name: str = Field(default="AI Engineering Bot", env="GIT_USER_NAME")
    git_user_email: str = Field(default="ai-bot@example.com", env="GIT_USER_EMAIL")
    github_token: Optional[str] = Field(default=None, env="GITHUB_TOKEN")

    # === API ===
    api_host: str = Field(default="0.0.0.0", env="API_HOST")
    api_port: int = Field(default=8000, env="API_PORT")
    api_secret_key: str = Field(default="change-me", env="API_SECRET_KEY")
    debug: bool = Field(default=False, env="DEBUG")

    # === Logging ===
    log_level: str = Field(default="INFO", env="LOG_LEVEL")

    model_config = {"env_file": ".env", "env_file_encoding": "utf-8", "extra": "ignore"}


settings = Settings()
