"""
Send messages through raw Telegram Bot API payload.
"""
import aiohttp

from config.settings import BOT_TOKEN


async def send_or_edit_with_raw_keyboard(
    chat_id: int,
    text: str,
    reply_markup: dict,
    message_id: int | None = None,
):
    """Send or edit message with raw reply_markup payload including extra fields."""
    method = "editMessageText" if message_id else "sendMessage"
    url = f"https://api.telegram.org/bot{BOT_TOKEN}/{method}"

    payload = {
        "chat_id": chat_id,
        "text": text,
        "parse_mode": "HTML",
        "reply_markup": reply_markup,
    }
    if message_id is not None:
        payload["message_id"] = message_id

    async with aiohttp.ClientSession() as session:
        async with session.post(url, json=payload, timeout=20) as response:
            data = await response.json()
            return data
