from hoshino import Service, priv, logger
from ..get_data import get_bind_game
from ..db_util import insert_public_cookie, update_private_cookie, delete_cookie_cache, delete_cookie, delete_private_cookie,update_last_query, reset_public_cookie
from ..util import check_cookie

help_msg='''
1.[ysb cookie]绑定你的私人cookie以开启高级功能
2.[删除ck]删除你的私人cookie
3.[添加公共ck cookie]添加公共cookie以供大众查询*仅管理员
'''
sv = Service('派蒙绑定', visible=False, enable_on_default=True, bundle='派蒙', help_=help_msg)

cookie_error_msg = '这个cookie无效哦,请旅行者确认是否正确\n1.ck要登录mys帐号后获取,且不能退出登录\n2.ck中要有cookie_token和account_id两个参数\n3.建议在无痕模式下取'

@sv.on_prefix(('原神绑定','ysb'))
async def bind(bot,ev):
    cookie = ev.message.extract_plain_text().strip()
    if cookie == '':
        res = '''旅行者好呀,你可以直接用ys/ysa等指令附上uid来使用派蒙\n如果想看全部角色信息和实时便笺等功能,要把cookie给派蒙哦\ncookie获取方法:登录网页版米游社,在地址栏粘贴代码:\njavascript:(function(){prompt(document.domain,document.cookie)})();\n复制弹窗出来的字符串(手机要via或chrome浏览器才行)\n然后添加派蒙私聊发送ysb接刚刚复制的字符串,例如:ysb UM_distinctid=17d131d...\ncookie是账号重要安全信息,请确保机器人持有者可信赖!'''
        await bot.send(ev,res,at_sender=True)
    else:
        cookie_info, mys_id = await get_bind_game(cookie)
        if not cookie_info or cookie_info['retcode'] != 0:
            msg = cookie_error_msg
            if ev.detail_type != 'private':
                msg += '\n当前是在群聊里绑定,建议旅行者添加派蒙好友私聊绑定!'
            await bot.send(ev,msg,at_sender=True)
        else:
            for data in cookie_info['data']['list']:
                if data['game_id'] == 2:
                    uid = data['game_role_id']
                    nickname = data['nickname']
                    break
            if uid:
                await update_private_cookie(user_id=str(ev.user_id), uid=uid, mys_id=mys_id, cookie=cookie)
                await update_last_query(str(ev.user_id), uid, 'uid')
                await delete_cookie_cache(uid, key='uid', all=False)
                msg = f'{nickname}绑定成功啦!使用ys/ysa等指令和派蒙互动吧!'
                if ev.detail_type != 'private':
                    msg += '\n当前是在群聊里绑定,建议旅行者把cookie撤回哦!'
                await bot.send(ev,msg,at_sender=True)
                    
@sv.on_prefix('删除ck')
async def delete(bot,ev):
    user_id = str(ev.user_id)
    await delete_private_cookie(str(ev.user_id))
    await bot.send(ev, '派蒙把你的私人cookie都删除啦!', at_sender=True)

@sv.on_prefix('添加公共ck')
async def bing_public(bot, ev):
    if not priv.check_priv(ev, priv.ADMIN):
        await bot.send(ev, '只有管理员或主人才能添加公共cookie哦!')
        return
    cookie = ev.message.extract_plain_text().strip()
    if await check_cookie(cookie):
        await insert_public_cookie(cookie)
        await bot.send(ev, '公共cookie添加成功啦,派蒙开始工作!')
    else:
        await bot.send(ev, cookie_error_msg)

@sv.scheduled_job('cron', hour='0')
async def delete_cache():
    logger.info('---清空今日cookie缓存---')
    await delete_cookie_cache(all=True)
    logger.info('---清空今日cookie限制记录---')
    await reset_public_cookie()