"""Stub telegram before bot.py is imported so pytest doesn't need the real package."""
from __future__ import annotations

import sys
import types
from unittest.mock import MagicMock


def _make_telegram_stub() -> types.ModuleType:
    mod = types.ModuleType("telegram")
    mod.Update = MagicMock
    mod.InlineKeyboardButton = MagicMock
    mod.InlineKeyboardMarkup = MagicMock
    return mod


def _make_telegram_ext_stub() -> types.ModuleType:
    mod = types.ModuleType("telegram.ext")
    mod.ApplicationBuilder = MagicMock

    # ContextTypes.DEFAULT_TYPE is referenced as a type annotation at class-body
    # evaluation time, so it must be a real attribute, not a dynamic MagicMock attr.
    ContextTypesMock = MagicMock()
    ContextTypesMock.DEFAULT_TYPE = type(None)
    mod.ContextTypes = ContextTypesMock

    mod.CommandHandler = MagicMock
    mod.CallbackQueryHandler = MagicMock
    mod.MessageHandler = MagicMock
    mod.filters = MagicMock()
    return mod


# Insert before any import of bot.py
if "telegram" not in sys.modules:
    sys.modules["telegram"] = _make_telegram_stub()
if "telegram.ext" not in sys.modules:
    sys.modules["telegram.ext"] = _make_telegram_ext_stub()
