"""Настройки моста, читаются из .env."""
from __future__ import annotations

import os
from dataclasses import dataclass
from pathlib import Path

from dotenv import load_dotenv

load_dotenv()


def _load_viktor_jwt() -> str:
    """JWT к api.viktor.com: из VIKTOR_JWT или из файла .viktor_jwt (рядом с проектом)."""
    env = os.environ.get("VIKTOR_JWT", "").strip()
    if env:
        return env
    f = Path(__file__).resolve().parent.parent / ".viktor_jwt"
    if f.exists():
        try:
            return f.read_text(encoding="utf-8").strip()
        except Exception:  # noqa: BLE001
            return ""
    return ""


@dataclass(frozen=True)
class Settings:
    # Slack-креды (опциональны: основной путь — accounts.json через TUI)
    slack_token: str
    slack_cookie_d: str
    slack_team_id: str
    viktor_dm: str
    viktor_user: str
    poll_interval: float
    refresh_hours: float
    # OpenCode-прокси
    local_repo_path: str
    github_owner: str
    proxy_port: int
    proxy_api_key: str
    resp_quiet: float
    resp_hard_cap: float
    # спрашивать ли про git pull через нативный tool-вопрос OpenCode (иначе авто-pull)
    git_pull_ask: bool
    # JWT к api.viktor.com — для детекта завершения по статусу треда (опционально)
    viktor_jwt: str
    # сессии / авто-компакт
    session_compact: bool
    session_max_turns: int
    session_summary: bool
    session_state_file: str
    # мульти-аккаунт / авто-failover по кредитам
    accounts_file: str
    account_min_credits: int


def load_settings() -> Settings:
    return Settings(
        # Account-креды НЕобязательны: их можно вести целиком в TUI (accounts.json).
        # В .env они нужны лишь как бутстрап одного аккаунта — если заданы и
        # accounts.json пуст, из них сидируется аккаунт «default».
        slack_token=os.environ.get("SLACK_TOKEN", "").strip(),
        slack_cookie_d=os.environ.get("SLACK_COOKIE_D", "").strip(),
        slack_team_id=os.environ.get("SLACK_TEAM_ID", "").strip(),
        viktor_dm=os.environ.get("SLACK_VIKTOR_DM", "").strip(),
        viktor_user=os.environ.get("SLACK_VIKTOR_USER", "").strip(),
        poll_interval=float(os.environ.get("SLACK_POLL_INTERVAL", "3")),
        refresh_hours=float(os.environ.get("SLACK_REFRESH_HOURS", "6")),
        local_repo_path=os.environ.get("LOCAL_REPO_PATH", "").strip(),
        github_owner=os.environ.get("GITHUB_OWNER", "").strip(),
        proxy_port=int(os.environ.get("PROXY_PORT", "8799")),
        proxy_api_key=os.environ.get("PROXY_API_KEY", "").strip(),
        resp_quiet=float(os.environ.get("RESP_QUIET", "25")),
        resp_hard_cap=float(os.environ.get("RESP_HARD_CAP", "900")),
        git_pull_ask=os.environ.get("GIT_PULL_ASK", "1").strip() not in ("0", "false", ""),
        viktor_jwt=_load_viktor_jwt(),
        session_compact=os.environ.get("SESSION_COMPACT", "1").strip() not in ("0", "false", ""),
        session_max_turns=int(os.environ.get("SESSION_MAX_TURNS", "8")),
        session_summary=os.environ.get("SESSION_SUMMARY", "1").strip() not in ("0", "false", ""),
        session_state_file=os.environ.get("SESSION_STATE_FILE", ".sessions.json"),
        accounts_file=os.environ.get("ACCOUNTS_FILE", "accounts.json"),
        account_min_credits=int(os.environ.get("ACCOUNT_MIN_CREDITS", "500")),
    )

