from nonebot.typing import T_State
from nonebot.permission import SUPERUSER
from nonebot.adapters.cqhttp.permission import GROUP_ADMIN, GROUP_OWNER
from nonebot.adapters.cqhttp import (
    Bot,
    MessageEvent,
    GroupMessageEvent,
    PrivateMessageEvent
)

from ATRI.service import Service as sv


__doc__ = """
启用功能,针对单群
权限组:维护者,群管理
用法:
  启用 目标命令
示例:
  启用 以图搜图 
"""

cur_service_ena = sv.on_command(
    cmd="启用功能",
    docs=__doc__,
    permission=SUPERUSER|GROUP_ADMIN|GROUP_OWNER
)

@cur_service_ena.args_parser  # type: ignore
async def _cur_ena_load(bot: Bot,
                        event: GroupMessageEvent,
                        state: T_State) -> None:
    msg = str(event.message).strip()
    quit_list = ['算了', '罢了', '取消']
    if msg in quit_list:
        await cur_service_ena.finish('好吧...')
    if not msg:
        await cur_service_ena.reject('请告诉咱目标命令!')
    else:
        state['service_e'] = msg

@cur_service_ena.handle()
async def _cur_ena(bot: Bot,
                   event: GroupMessageEvent,
                   state: T_State) -> None:
    msg = str(event.message).strip()
    if msg:
        state['service_e'] = msg

@cur_service_ena.got('service_e', prompt='请告诉咱目标命令!')
async def _deal_cur_ena(bot: Bot,
                        event: GroupMessageEvent,
                        state: T_State) -> None:
    cmd = state['service_e']
    group = str(event.group_id)
    sv.control_service(cmd, False, True, group=group)
    await cur_service_ena.finish(f'成功!本群已启用:{cmd}')

@cur_service_ena.handle()
async def _refuse_cur_ena(bot: Bot,
                          event: PrivateMessageEvent,
                          state: T_State) -> None:
    await cur_service_ena.finish('只能在群聊中决定哦...')


__doc__ = """
禁用功能,针对单群
权限组:维护者,群管理
用法:
  禁用 目标命令
示例:
  禁用 以图搜图 
"""

cur_service_dis = sv.on_command(
    cmd="禁用功能",
    docs=__doc__,
    permission=SUPERUSER|GROUP_ADMIN|GROUP_OWNER
)

@cur_service_dis.args_parser  # type: ignore
async def _cur_dis_load(bot: Bot,
                        event: GroupMessageEvent,
                        state: T_State) -> None:
    msg = str(event.message).strip()
    quit_list = ['算了', '罢了', '取消']
    if msg in quit_list:
        await cur_service_dis.finish('好吧...')
    if not msg:
        await cur_service_dis.reject('请告诉咱目标命令!')
    else:
        state['service_d'] = msg

@cur_service_dis.handle()
async def _cur_dis(bot: Bot,
                   event: GroupMessageEvent,
                   state: T_State) -> None:
    msg = str(event.message).strip()
    if msg:
        state['service_d'] = msg

@cur_service_dis.got('service_d', prompt='请告诉咱目标命令!')
async def _deal_cur_dis(bot: Bot,
                        event: GroupMessageEvent,
                        state: T_State) -> None:
    cmd = state['service_d']
    group = str(event.group_id)
    sv.control_service(cmd, False, False, group=group)
    await cur_service_dis.finish(f'成功!本群已禁用:{cmd}')

@cur_service_dis.handle()
async def _refuse_cur_dis(bot: Bot,
                          event: PrivateMessageEvent,
                          state: T_State) -> None:
    await cur_service_dis.finish('只能在群聊中决定哦...')


__doc__ = """
全局启用功能
权限组:维护者
用法:
  全局启用 目标命令
示例:
  全局启用 以图搜图
"""

glo_service_ena = sv.on_command(
    cmd="全局启用",
    docs=__doc__,
    permission=SUPERUSER
)

@glo_service_ena.args_parser  # type: ignore
async def _glo_ena_load(bot: Bot,
                        event: MessageEvent,
                        state: T_State) -> None:
    msg = str(event.message).strip()
    quit_list = ['算了', '罢了', '取消']
    if msg in quit_list:
        await glo_service_ena.finish('好吧...')
    if not msg:
        await glo_service_ena.reject('请告诉咱目标命令!')
    else:
        state['service_e_g'] = msg

@glo_service_ena.handle()
async def _glo_ena(bot: Bot,
                   event: MessageEvent,
                   state: T_State) -> None:
    msg = str(event.message).strip()
    if msg:
        state['service_e_g'] = msg

@glo_service_ena.got('service_e_g', prompt='请告诉咱目标命令!')
async def _deal_glo_ena(bot: Bot,
                        event: MessageEvent,
                        state: T_State) -> None:
    cmd = state['service_e_g']
    sv.control_service(cmd, True, True)
    await glo_service_ena.finish(f'成功!已全局启用:{cmd}')


__doc__ = """
全局禁用功能
权限组:维护者
用法:
  全局禁用 目标命令
示例:
  全局禁用 以图搜图
"""

glo_service_dis = sv.on_command(
    cmd="全局禁用",
    docs=__doc__,
    permission=SUPERUSER
)

@glo_service_dis.args_parser  # type: ignore
async def _glo_dis_load(bot: Bot,
                        event: MessageEvent,
                        state: T_State) -> None:
    msg = str(event.message).strip()
    quit_list = ['算了', '罢了', '取消']
    if msg in quit_list:
        await glo_service_dis.finish('好吧...')
    if not msg:
        await glo_service_dis.reject('请告诉咱目标命令!')
    else:
        state['service_d_g'] = msg

@glo_service_dis.handle()
async def _glo_dis(bot: Bot,
                   event: MessageEvent,
                   state: T_State) -> None:
    msg = str(event.message).strip()
    if msg:
        state['service_d_g'] = msg

@glo_service_dis.got('service_d_g', prompt='请告诉咱目标命令!')
async def _deal_glo_dis(bot: Bot,
                        event: MessageEvent,
                        state: T_State) -> None:
    cmd = state['service_d_g']
    sv.control_service(cmd, True, False)
    await glo_service_dis.finish(f'成功!已全局禁用:{cmd}')