from aiogram.filters import BaseFilter
from aiogram.types import CallbackQuery

# Настройка экспорта в модули
__all__ = ("CallbackDataStartsWith", "CallbackStartsWith")


class CallbackDataStartsWith(BaseFilter):
    """
    Фильтр для callback_data, начинающихся с префикса.

    Example:
        @router.callback_query(CallbackDataStartsWith("menu:"))
        async def handler(cb: CallbackQuery):
            await cb.answer("Это callback из меню ✅")
    """

    def __init__(self, prefix: str) -> None:
        self.prefix = prefix

    async def __call__(self, callback: CallbackQuery) -> bool:
        return bool(callback.data and callback.data.startswith(self.prefix))


class CallbackStartsWith(BaseFilter):
    """
    Фильтр для callback_data, которое начинается с команды из списка.
    Игнорирует регистр.
    """
    def __init__(self, commands: list[str]):
        self.commands = [cmd.casefold() for cmd in commands]

    async def __call__(self, callback: CallbackQuery) -> bool:
        data = callback.data.casefold() if callback.data else ""
        return any(data.startswith(cmd) for cmd in self.commands)
