from __future__ import annotations

from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    app_env: str = "production"
    app_secret_key: str = "change-me"
    admin_bootstrap_login: str = "admin"
    admin_bootstrap_password: str = ""

    db_host: str = "localhost"
    db_port: int = 5432
    db_name: str = "vk_parser"
    db_user: str = "vk_parser_user"
    db_password: str = ""

    vk_access_token: str = ""
    vk_group_access_token: str = ""
    vk_api_version: str = "5.199"
    vk_storage_group_id: int = 0

    tg_bot_token: str = ""
    tg_media_channel_id: str = ""
    local_bot_api_url: str = ""

    admin_host: str = "0.0.0.0"
    admin_port: int = 8080
    log_level: str = "INFO"

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

    @property
    def db_dsn(self) -> str:
        return (
            f"postgresql://{self.db_user}:{self.db_password}"
            f"@{self.db_host}:{self.db_port}/{self.db_name}"
        )

    @property
    def vk_storage_owner_id(self) -> int:
        return -abs(int(self.vk_storage_group_id))


settings = Settings()
