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_target(del_cookie_target: type[Matcher]):
    handle_cancel = gen_handle_cancel(del_cookie_target, "取消关联中止")

    @del_cookie_target.handle()
    async def send_list(state: T_State, event: MessageEvent):
        await only_allow_private(event, del_cookie_target)
        cookie_targets = await config.get_cookie_target()
        if not cookie_targets:
            await del_cookie_target.finish("暂无已关联 Cookie\n请使用“添加cookie”命令添加关联")
        res = "已关联的 Cookie 为:\n"
        state["cookie_target_table"] = {}
        for index, cookie_target in enumerate(cookie_targets, 1):
            friendly_name = cookie_target.cookie.cookie_name
            state["cookie_target_table"][index] = {
                "platform_name": cookie_target.target.platform_name,
                "target": cookie_target.target,
                "friendly_name": friendly_name,
                "cookie_target": cookie_target,
            }
            res += f"{index} {cookie_target.target.platform_name} {cookie_target.target.target_name} {friendly_name}\n"
            if res[-1] != "\n":
                res += "\n"
        res += "请输入要删除的关联的序号\n输入'取消'中止"
        await MessageFactory(await parse_text(res)).send()

    @del_cookie_target.receive(parameterless=[handle_cancel])
    async def do_del(
        state: T_State,
        index_str: str = EventPlainText(),
    ):
        try:
            index = int(index_str)
            await config.delete_cookie_target_by_id(state["cookie_target_table"][index]["cookie_target"].id)
        except Exception:
            await del_cookie_target.reject("删除错误")
        else:
            await del_cookie_target.finish("删除成功")