import rsa
import random
import time
import datetime
import hashlib
import urllib.parse
from Config import *


def Sign(payload):
    # ios 6680
    # appkey = "27eb53fc9058f8c3"
    # appsecret = "c2ed53a74eeefe3cf99fbd01d8c9c375"

    # Android
    # appkey = "1d8b6e7d45233436"
    # appsecret = "560c52ccd288fed045859ed18bffd973"

    # 云视听 TV
    appkey = "4409e2ce8ffd12b8"
    appsecret = "59b43e04ad6965f34319062b478f83dd"

    default = {
        "access_key": account["Token"]["ACCESS_TOKEN"],
        "actionKey": "appkey",
        "appkey": appkey,
        "build": "102100",
        "device": "android",
        "mobi_app": "android",
        "platform": "android",
        "ts": int(time.time()),
        "type": "json"
    }

    payload = dict(payload, **default)
    payload = ksort(payload)
    data = urllib.parse.urlencode(payload)
    md5 = hashlib.md5()
    md5.update(data.encode() + appsecret.encode())
    sign = {"sign": md5.hexdigest()}
    payload = dict(payload, **sign)
    return payload


def msign(strr):
    appsecret = "c2ed53a74eeefe3cf99fbd01d8c9c375"
    strr = f"{strr}{appsecret}"
    sign = hashlib.md5()
    sign.update(strr.encode("utf-8"))
    sign = sign.hexdigest()
    return sign


# ksort方法来自Php2Python,在此感谢Php2Python!
def ksort(d):
    return [(k, d[k]) for k in sorted(d.keys())]


def openssl_public_encrypt(plaintext, key):
    key = rsa.PublicKey.load_pkcs1_openssl_pem(key)
    ciphertext = rsa.encrypt(plaintext.encode(), key)
    return ciphertext


def arrange_cookie(array):
    cookie_array = array["data"]["cookie_info"]["cookies"]
    cookie = ""
    for i in range(0, len(cookie_array)):
        cookie = cookie + cookie_array[i]["name"] + "=" + cookie_array[i]["value"] + ";"
    return cookie_array[0]["value"], cookie_array[1]["value"], cookie


# 获取当天晚上23点59分59秒的时间戳
def std235959():
    now = datetime.datetime.now()
    zeroToday = now - datetime.timedelta(hours=now.hour, minutes=now.minute, seconds=now.second,
                                         microseconds=now.microsecond)
    lastToday = zeroToday + datetime.timedelta(hours=23, minutes=59, seconds=59)
    return int(time.mktime(lastToday.timetuple()))


# 获取Asyncio需要休眠多少时间才能到明天
def std235959ptm():
    time235959 = std235959()
    return time235959 + random.randint(300, 600) - int(time.time())


def get_default():
    # ios 6680
    appkey = "27eb53fc9058f8c3"

    default = {
        "access_key": account["Token"]["ACCESS_TOKEN"],
        "actionKey": "appkey",
        "appkey": appkey,
        "build": "8290",
        "device": "phone",
        "mobi_app": "iphone",
        "platform": "ios",
        "ts": int(time.time()),
        "type": "json"
    }

    return default


def set_cookie(cookie):
    account["Token"]["COOKIE"] = cookie
    config["pcheaders"]["cookie"] = cookie


def adjust_for_chinese(str):
    SPACE = '\N{IDEOGRAPHIC SPACE}'
    EXCLA = '\N{FULLWIDTH EXCLAMATION MARK}'
    TILDE = '\N{FULLWIDTH TILDE}'

    # strings of ASCII and full-width characters (same order)
    west = ''.join(chr(i) for i in range(ord(' '), ord('~')))
    east = SPACE + ''.join(chr(i) for i in range(ord(EXCLA), ord(TILDE)))

    # build the translation table
    full = str.maketrans(west, east)
    str = str.translate(full).rstrip().split('\n')
    md = f'{str[0]:^10}'
    return md.translate(full)