from functools import lru_cache
from pathlib import Path

from pydantic_settings import BaseSettings, SettingsConfigDict

BASE_DIR = Path(__file__).resolve().parents[1]


class BotSettings(BaseSettings):
    model_config = SettingsConfigDict(
        env_file=str(BASE_DIR / ".env"), env_file_encoding="utf-8", extra="ignore"
    )

    bot_token: str
    bot_username: str = ""
    bot_mode: str = "polling"

    api_base_url: str = "http://127.0.0.1:8000/api/v1"
    bot_api_token: str = "change-me"
    api_timeout: float = 30.0

    webhook_url: str = ""
    webhook_path: str = "/telegram/webhook"
    webhook_host: str = "0.0.0.0"
    webhook_port: int = 8081
    telegram_webhook_secret: str = ""

    admin_telegram_ids: str = ""
    log_level: str = "INFO"

    @property
    def admin_ids(self) -> set[int]:
        return {
            int(value.strip())
            for value in self.admin_telegram_ids.split(",")
            if value.strip().isdigit()
        }


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


settings = get_settings()
