"""Application settings loaded from environment / .env file."""
from pathlib import Path

from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    """All configuration is read from environment variables or a .env file."""

    model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")

    anthropic_api_key: str = Field(default="", alias="ANTHROPIC_API_KEY")
    anthropic_base_url: str = Field(default="", alias="ANTHROPIC_BASE_URL")
    claude_model: str = Field(default="claude-haiku-4-5-20251001", alias="CLAUDE_MODEL")

    db_path: Path = Field(default=Path("data/usecases.db"), alias="DB_PATH")
    obsidian_report_dir: Path = Field(
        default=Path("/root/vault/obsidian_vault/obsidian/obsidian/auto_report"),
        alias="OBSIDIAN_REPORT_DIR",
    )

    hn_min_points: int = Field(default=10, alias="HN_MIN_POINTS")

    exa_api_key: str = Field(default="", alias="EXA_API_KEY")
    reddit_subreddits: list[str] = Field(
        default=["openclaw", "vibecoding", "ClaudeCode", "singularity"],
        alias="REDDIT_SUBREDDITS",
    )

    github_token: str = Field(default="", alias="GITHUB_TOKEN")
    github_min_stars: int = Field(default=10, alias="GITHUB_MIN_STARS")

    # Cap LLM calls per run to keep runtime under ~5 minutes
    max_items_per_run: int = Field(default=80, alias="MAX_ITEMS_PER_RUN")

    deep_dive_report_dir: Path = Field(
        default=Path("/root/vault/obsidian_vault/obsidian/obsidian/auto_report/deep-dive"),
        alias="DEEP_DIVE_REPORT_DIR",
    )
    deep_dive_model: str = Field(
        default="claude-sonnet-4-6",
        alias="DEEP_DIVE_MODEL",
    )
