import os
import re
import time
import json
import sqlite3
import requests
from urllib.parse import urlencode
from random import choice, randint
from pathlib import Path
from datetime import datetime
from random import choice
import nonebot
from nonebot import on_command, CommandSession

import config # type: ignore
from ATRI.modules.response import request_api_params # type: ignore
from ATRI.modules.b64 import b64_str_img_url # type: ignore


bot = nonebot.get_bot()
master = config.MASTER()
apikey_LOLI = bot.config.LOLICONAPI # type: ignore
APP_ID = config.BAIDU_APP_ID()
API_KEY = config.BAIDU_API_KEY()
SECRECT_KEY = config.BAIDU_SECRET()

URL = 'https://api.lolicon.app/setu/'

SETU_REPLY = """Title: {title}
Pid: {pid}
{setu}
---------------
Complete time:{time}s"""


def now_time():
    now_ = datetime.now()
    hour = now_.hour
    minute = now_.minute
    now = hour + minute / 60
    return now


setu_type = 1
@on_command('setu', patterns = (r"来[点丶张份副个幅][涩色瑟][图圖]|[涩色瑟][图圖]来|[涩色瑟][图圖][gkd|GKD|搞快点]|[gkd|GKD|搞快点][涩色瑟][图圖]|[图圖]来|[我你她他它]想要[点丶张份副][涩色瑟][图圖]|我想要[1一][张份幅副个只][涩色瑟][图圖]|[我你她他它]想[看|look][涩涩|色色]的东西"), only_to_me = False)
async def setu(session: CommandSession):
    start = time.perf_counter()
    user = session.event.user_id
    group = session.event.group_id
    try:
        with open(Path('.') / 'ATRI' / 'plugins' / 'noobList' / 'noobGroup.json', 'r') as f:
            data = json.load(f)
    except:
        data = {}
    try:
        with open(Path('.') / 'ATRI' / 'plugins' / 'noobList' / 'noobList.json', 'r') as f:
            data1 = json.load(f)
    except:
        data1 = {}

    if str(group) in data.keys():
        pass
    else:
        if str(user) in data1.keys():
            pass
        else:
            if 0 <= now_time() < 5.5:
                await session.send(
                    choice(
                        [
                            'zzzz......',
                            'zzzzzzzz......',
                            'zzz...好涩哦..zzz....',
                            '别...不要..zzz..那..zzz..',
                            '嘻嘻..zzz..呐~..zzzz..'
                        ]
                    )
                )
            else:
                with open(Path('.') / 'ATRI' / 'plugins' / 'switch' / 'switch.json', 'r') as f:
                    data1 = json.load(f)

                if data1["setu"] == "on":
                    res = randint(1,10)
                    if 1 <= res < 9:
                        res = randint(1,4)
                        if 1 <= res < 3:
                            if setu_type == 1:
                                res = randint(1,4)
                                con = sqlite3.connect(Path('.') / 'ATRI' / 'data' / 'sqlite' / 'setu' / 'nearR18.db')
                                cur = con.cursor()
                                msg = cur.execute('SELECT * FROM nearR18 ORDER BY RANDOM() limit 1;')
                            
                                if 1 <= res < 3:
                                    for i in msg:
                                        pid = i[0]
                                        title = i[1]
                                        img = i[7]
                                        end = time.perf_counter()
                                        await session.send(
                                            SETU_REPLY.format(
                                            title = title,
                                            pid = pid,
                                            setu = img,
                                            time = round(end - start, 3)
                                            )
                                        )
                                elif res == 4:
                                    for i in msg:
                                        pid = i[0]
                                        title = i[1]
                                        img = i[7]
                                        end = time.perf_counter()
                                        await session.send('我找到涩图了!但我发给主人了\nο(=•ω<=)ρ⌒☆')
                                        await bot.send_private_msg( # type: ignore
                                            user_id = master,
                                            message = f"主人,从群{group}来的涩图!热乎着!\nTitle: {title}\nPid: {pid}\n{img}\nComplete time: {round(end - start, 3)}"
                                        )
                            
                            elif setu_type == 2:
                                res = randint(1,4)
                                await session.send('别急!正在找图!')
                                start = time.perf_counter()
                                values = {
                                    "apikey": apikey_LOLI,
                                    "r18": "0",
                                    "num": "1"
                                }

                                try:
                                    dc = json.loads(request_api_params(URL, values))
                                    title = dc["data"][0]["title"]
                                    pid = dc["data"][0]["pid"]
                                    setu = dc["data"][0]["url"] #b64.b64_str_img_url(dc["data"][0]["url"])
                                except:
                                    await session.send('失败了失败了失败了失...')
                                    return
                                if 1 <= res < 3:
                                    end = time.perf_counter()
                                    await session.send(
                                        SETU_REPLY.format(
                                        title = title,
                                        pid = pid,
                                        setu = dc["data"][0]["url"],
                                        time = round(end - start, 3)
                                        )
                                    )
                                elif res == 4:
                                    end = time.perf_counter()
                                    await session.send('我找到涩图了!但我发给主人了\nο(=•ω<=)ρ⌒☆')
                                    await bot.send_private_msg( # type: ignore
                                        user_id = master,
                                        message = f"主人,从群{group}来的涩图!热乎着!\nTitle: {title}\nPid: {pid}\n{setu}\nComplete time: {round(end - start, 3)}"
                                    )
                        elif res == 4:
                            img = choice(
                                [
                                    'SP.jpg', 'SP1.jpg', 'SP2.jpg'
                                ]
                            )
                            img = Path('.') / 'ATRI' / 'data' / 'emoji' / f'{img}'
                            img = os.path.abspath(img)
                            await session.send(f'[CQ:image,file=file:///{img}]')
                    
                    elif res == 10:
                        img = choice(
                            [
                                'GDZ.png', 'SHZY1.jpg', 'SHZY2.jpg', 'SHZY3.jpg', 'SHZY4.jpg', 'SHZY5.jpg', 'SHZY6.jpg'
                            ]
                        )
                        img = Path('.') / 'ATRI' / 'data' / 'img' / 'niceIMG' / f'{img}'
                        img = os.path.abspath(img)
                        await session.send(f'[CQ:image,file=file:///{img}]')

                else:
                    await session.send('该功能已被禁用...')


@on_command('change_setu_type', aliases = ['涩图导向'], only_to_me = False)
async def _(session: CommandSession):
    global setu_type
    if session.event.user_id == master:
        msg = session.event.raw_message.split(' ', 1)
        s_type = msg[1]
        
        if s_type == '数据库':
            setu_type = 1
        
        elif s_type == '接口':
            setu_type = 2
        
        else:
            pass
        
        await session.send('okay~~~~')


@bot.on_message("group")
async def _(context):
    start = time.perf_counter()
    user = context["user_id"]
    group = context["group_id"]
    if 0 <= now_time() < 5.5:
        pass
    else:
        try:
            with open(Path('.') / 'ATRI' / 'plugins' / 'noobList' / 'noobGroup.json', 'r') as f:
                data = json.load(f)
        except:
            data = {}
        try:
            with open(Path('.') / 'ATRI' / 'plugins' / 'noobList' / 'noobList.json', 'r') as f:
                data1 = json.load(f)
        except:
            data1 = {}

        if str(group) in data.keys():
            pass
        else:
            if str(user) in data1.keys():
                pass
            else:
                try:
                    img = str(context["message"])
                    pattern = re.compile(r"url=(.*)]")
                    img = re.findall(pattern, img)
                    img = img[0].replace('url=', '')
                    img = img.replace(']', '')
                    print(img)
                except:
                    return
                img = b64_str_img_url(img)
                if img:
                    host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={API_KEY}&client_secret={SECRECT_KEY}'
                    headers = {
                        'Content-Type': 'application/json;charset=UTF-8'
                    }
                    res = json.loads(request_api_params(host, headers))
                    access_token=res['access_token']
                    url = f'https://aip.baidubce.com/rest/2.0/ocr/v1/general?access_token={access_token}'
                    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
                    data = urlencode({'image': img})
                    res = requests.post(url=url, headers=headers, data=data)
                    
                    try:
                        words = json.loads(res.content)['words_result'][0]['words']
                        print(words)
                    except:
                        return

                    if re.findall(r"[涩色]图", words):
                        with open(Path('.') / 'ATRI' / 'plugins' / 'switch' / 'switch.json', 'r') as f:
                            data1 = json.load(f)

                        if data1["setu"] == "on":
                            res = randint(1,10)
                            if 1 <= res < 9:
                                res = randint(1,4)
                                if 1 <= res < 3:
                                    if setu_type == 1:
                                        res = randint(1,4)
                                        con = sqlite3.connect(Path('.') / 'ATRI' / 'data' / 'sqlite' / 'setu' / 'nearR18.db')
                                        cur = con.cursor()
                                        msg = cur.execute('SELECT * FROM nearR18 ORDER BY RANDOM() limit 1;')
                                    
                                        if 1 <= res < 3:
                                            for i in msg:
                                                pid = i[0]
                                                title = i[1]
                                                img = i[7]
                                                end = time.perf_counter()
                                                msg = SETU_REPLY.format(
                                                    title = title,
                                                    pid = pid,
                                                    setu = img,
                                                    time = round(end - start, 3)
                                                )
                                                await bot.send_group_msg(group_id = group, message = msg) # type: ignore
                                        elif res == 4:
                                            for i in msg:
                                                pid = i[0]
                                                title = i[1]
                                                img = i[7]
                                                end = time.perf_counter()
                                                await bot.send_group_msg(group_id = group, message = '我找到涩图了!但我发给主人了\nο(=•ω<=)ρ⌒☆') # type: ignore
                                                await bot.send_private_msg( # type: ignore
                                                    user_id = master,
                                                    message = f"主人,从群{group}来的涩图!热乎着!\nTitle: {title}\nPid: {pid}\n{img}\nComplete time: {round(end - start, 3)}"
                                                )
                                    
                                    elif setu_type == 2:
                                        res = randint(1,4)
                                        await bot.send_group_msg(group_id = group, message = '别急!正在找图!') # type: ignore
                                        start = time.perf_counter()
                                        values = {
                                            "apikey": apikey_LOLI,
                                            "r18": "0",
                                            "num": "1"
                                        }

                                        try:
                                            dc = json.loads(request_api_params(URL, values))
                                            title = dc["data"][0]["title"]
                                            pid = dc["data"][0]["pid"]
                                            setu = dc["data"][0]["url"] #b64.b64_str_img_url(dc["data"][0]["url"])
                                        except:
                                            await bot.send_group_msg(group_id = group, message = '失败了失败了失...') # type: ignore
                                            return
                                        if 1 <= res < 3:
                                            end = time.perf_counter()
                                            msg = SETU_REPLY.format(
                                                    title = title,
                                                    pid = pid,
                                                    setu = img,
                                                    time = round(end - start, 3)
                                                )
                                            await bot.send_group_msg(group_id = group, message = msg) # type: ignore
                                        elif res == 4:
                                            end = time.perf_counter()
                                            await bot.send_group_msg(group_id = group, message = '我找到涩图了!但我发给主人了\nο(=•ω<=)ρ⌒☆') # type: ignore
                                            await bot.send_private_msg( # type: ignore
                                                user_id = master,
                                                message = f"主人,从群{group}来的涩图!热乎着!\nTitle: {title}\nPid: {pid}\n{setu}\nComplete time: {round(end - start, 3)}"
                                            )
                                elif res == 4:
                                    img = choice(
                                        [
                                            'SP.jpg', 'SP1.jpg', 'SP2.jpg'
                                        ]
                                    )
                                    img = Path('.') / 'ATRI' / 'data' / 'emoji' / f'{img}'
                                    img = os.path.abspath(img)
                                    await bot.send_group_msg(group_id = group, message = f'[CQ:image,file=file:///{img}]') # type: ignore
                            
                            elif res == 10:
                                img = choice(
                                    [
                                        'GDZ.png', 'SHZY1.jpg', 'SHZY2.jpg', 'SHZY3.jpg', 'SHZY4.jpg', 'SHZY5.jpg', 'SHZY6.jpg'
                                    ]
                                )
                                img = Path('.') / 'ATRI' / 'data' / 'img' / 'niceIMG' / f'{img}'
                                img = os.path.abspath(img)
                                await bot.send_group_msg(group_id = group, message = f'[CQ:image,file=file:///{img}]') # type: ignore

                        else:
                            pass