from re import T
from nonebot.rule import Rule
from nonebot.typing import Bot, Event

from ATRI.service import Service


def isInService(service: str) -> Rule:
    async def _isInService(bot: Bot, event: Event, state: dict) -> bool:
        return Service().Switch().auth_service(service, event.group_id)

    return Rule(_isInService)


def isInBanList() -> Rule:
    async def _isInBanList(bot: Bot, event: Event, state: dict) -> bool:
        return Service().BanList().is_in_list(event.user_id)

    return Rule(_isInBanList)


def isInDormant() -> Rule:
    async def _isInDormant(bot: Bot, event: Event, state: dict) -> bool:
        return Service().Dormant().is_sleep()

    return Rule(_isInDormant)


def toGroup() -> Rule:
    async def _toGroup(bot: Bot, event: Event, state: dict) -> bool:
        return bool(event.group_id)

    return Rule(_toGroup)


def toPrivate() -> Rule:
    async def _toPrivate(bot: Bot, event: Event, state: dict) -> bool:
        return not bool(event.group_id)

    return Rule(_toPrivate)

def toBot() -> Rule:
    async def _toBot(bot: Bot, event: Event, state: dict) -> bool:
        return bool(event.to_me)
    
    return Rule(_toBot)