"""Отправка сообщений основным ботом панели."""

from __future__ import annotations

import json
import urllib.request

from server.config import BOT_TOKEN, PANEL_BOT_TOKEN

SMS_CHAT_ERROR = "Чат отсутствует или бот в него не добавлен"
SMS_TEST_TEXT = (
    "OZ Panel: тестовое сообщение.\n"
    "Сюда будут приходить SMS с ваших личных кабинетов."
)


def _bot_token() -> str:
    return str(PANEL_BOT_TOKEN or BOT_TOKEN or "").strip()


def send_bot_message(chat_id: int, text: str, *, parse_mode: str = "HTML") -> None:
    token = _bot_token()
    if not token:
        raise ValueError(SMS_CHAT_ERROR)
    payload = {
        "chat_id": int(chat_id),
        "text": text,
        "parse_mode": parse_mode,
        "disable_web_page_preview": True,
    }
    request = urllib.request.Request(
        f"https://api.telegram.org/bot{token}/sendMessage",
        data=json.dumps(payload).encode("utf-8"),
        method="POST",
        headers={"Content-Type": "application/json", "Accept": "application/json"},
    )
    try:
        with urllib.request.urlopen(request, timeout=20) as response:
            data = json.loads(response.read().decode("utf-8") or "{}")
    except Exception as exc:
        raise ValueError(SMS_CHAT_ERROR) from exc
    if not isinstance(data, dict) or not data.get("ok"):
        raise ValueError(SMS_CHAT_ERROR)
