#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
'''
@File    :   __init__.py
@Time    :   2020/10/11 14:40:34
@Author  :   Kyomotoi
@Contact :   kyomotoiowo@gmail.com
@Github  :   https://github.com/Kyomotoi
@License :   Copyright © 2018-2020 Kyomotoi, All Rights Reserved.
'''
__author__ = 'kyomotoi'

import re
import json
import requests

from nonebot.log import logger
from nonebot.plugin import on_message
from nonebot.adapters.cqhttp import Bot, Event

from utils.utils_banList import banList
from utils.utils_request import request_get

from .body import dec, enc


BILI_REPORT_FORMAT = """[{aid}] Info:
Title: {title}
bid: {bid}
Viev: {view} Like: {like}
Coin: {coin} Share: {share}
Link:
{aid_link}
{bid_link}"""

bilibiliRich = on_message()

@bilibiliRich.handle() # type: ignore
async def _(bot: Bot, event: Event, state: dict) -> None:
    user = str(event.user_id)
    group = str(event.group_id)

    if banList(user, group):
        msg = str(event.message)

        if "qqdocurl" not in msg:
            try:
                bv = re.findall(r"(BV\w+)", msg)
            except:
                return
        else:
            bvURL = re.findall(r"(........b23...\S+\=)", msg)

            try:
                r = requests.get(bvURL[0], stream=True, allow_redirects = True)
            except:
                logger.waring("Get BV ERROR. (Request ERROR)")
                return

            bv = re.findall(r"(BV\w+)", r.url)
        
        if bv:
            aid = str(dec(bv[0]))
            ad = 'av' + aid
            URL = f'https://api.imjad.cn/bilibili/v2/?aid={aid}'

            try:
                res = request_get(URL)
            except:
                logger.waring("Request ERROR")
                return
            
            data = json.loads(res)
            msg = BILI_REPORT_FORMAT.format(
                title = data["data"]["title"],

                view = data["data"]["stat"]["view"],
                coin = data["data"]["stat"]["coin"],
                share = data["data"]["stat"]["share"],
                like = data["data"]["stat"]["like"],

                bid = data["data"]["bvid"],
                bid_link = data["data"]["short_link"],

                aid = ad,
                aid_link = f'https://b23.tv/{ad}'
                )
            
            await bilibiliRich.finish(msg)
        
        else:
            return


CLOUDMUSIC_REPORT_FORMAT = """Status: {status}
Song id: {id}
Br: {br}
Download: {url}
MD5: {md5}"""

cloudmusicRich = on_message()

@cloudmusicRich.handle() # type: ignore
async def _(bot: Bot, event: Event, state: dict) -> None:
    user = str(event.user_id)
    group = str(event.group_id)

    if banList(user, group):
        msg = str(event.message)

        if "music.163.com" in msg:
            music_id = re.findall(r"song\S+\/|id=\S+\&", msg)

            if music_id:
                music_id = str(music_id[0])
                music_id = re.findall(r"-?[1-9]\d*", music_id)
                URL = f'https://api.imjad.cn/cloudmusic/?type=song&id={music_id[0]}&br=320000'

                try:
                    res = request_get(URL)
                except:
                    logger.waring("Request ERROR")
                    return
                
                data = json.loads(res)
                msg = CLOUDMUSIC_REPORT_FORMAT.format(
                    status = data["code"],
                    id = data["data"][0]["id"],
                    br = data["data"][0]["br"],
                    url = data["data"][0]["url"],
                    md5 = data["data"][0]["md5"],
                )

                await cloudmusicRich.finish(msg)
        
        else:
            return