from nonebot.typing import T_State
from nonebot.matcher import Matcher
from nonebot.params import EventPlainText
from nonebot_plugin_saa import MessageFactory
from nonebot.adapters.onebot.v11 import MessageEvent

from ..config import config
from ..utils import parse_text
from .utils import gen_handle_cancel, only_allow_private


def do_del_cookie(del_cookie: type[Matcher]):
    handle_cancel = gen_handle_cancel(del_cookie, "删除中止")

    @del_cookie.handle()
    async def send_list(state: T_State, event: MessageEvent):
        await only_allow_private(event, del_cookie)
        cookies = await config.get_cookie(is_anonymous=False)
        if not cookies:
            await del_cookie.finish("暂无已添加的 Cookie\n请使用“添加cookie”命令添加")
        res = "已添加的 Cookie 为:\n"
        state["cookie_table"] = {}
        for index, cookie in enumerate(cookies, 1):
            state["cookie_table"][index] = cookie
            res += f"{index} {cookie.site_name} {cookie.cookie_name} {len(cookie.targets)}个关联\n"
            if res[-1] != "\n":
                res += "\n"
        res += "请输入要删除的 Cookie 的序号\n输入'取消'中止"
        await MessageFactory(await parse_text(res)).send()

    @del_cookie.receive(parameterless=[handle_cancel])
    async def do_del(
        state: T_State,
        index_str: str = EventPlainText(),
    ):
        try:
            index = int(index_str)
            cookie = state["cookie_table"][index]
            if cookie.targets:
                await del_cookie.reject("只能删除未关联的 Cookie,请使用“取消关联cookie”命令取消关联")
            await config.delete_cookie_by_id(cookie.id)
        except KeyError:
            await del_cookie.reject("序号错误")
        except Exception:
            await del_cookie.reject("删除错误")
        else:
            await del_cookie.finish("删除成功")