"""Unauthorized update matrix for inherited owner Telegram handlers."""

from __future__ import annotations

from telegram import Bot


from scripts.nutricoach_v140_fake_telegram import FakeTelegramEngine
from scripts.nutricoach_v140_fake_telegram_updates import FakeCallbackQuery
from scripts.nutricoach_v140_telegram_facade import DisposableOwnerTelegramAdapter


class UnauthorizedProviderCallError(RuntimeError):
    """An invalid update crossed the production provider boundary."""


async def run_owner_denial_matrix(
    adapter: DisposableOwnerTelegramAdapter,

    bot: Bot,
    engine: FakeTelegramEngine,
    callback_data: str,
    message_id: str,
) -> int:
    """Drive malformed, wrong-user, wrong-chat, and wrong-topic callbacks."""
    action_count = len(engine.actions)
    attempts = engine.attempts
    queries = (

        FakeCallbackQuery(
            bot, engine, data=callback_data, user_id="101", chat_id="100",
            message_id=message_id, topic_id=None,
        ),
        FakeCallbackQuery(
            bot, engine, data=callback_data, user_id="100", chat_id="101",
            message_id=message_id, topic_id=None, source_chat_id="100",
        ),
        FakeCallbackQuery(
            bot, engine, data=callback_data, user_id="100", chat_id="100",
            message_id=message_id, topic_id="59", chat_type="supergroup",
        ),
    )
    for query in queries:
        denial = await adapter.handle_owner_callback(query)
        if denial is None or query.answers:
            raise UnauthorizedProviderCallError
    if len(engine.actions) != action_count or engine.attempts != attempts:
        raise UnauthorizedProviderCallError
    return len(queries)