from model.DataBaseUtils import MysqlUtils,CkUtils
import base64
import requests
import time
import hashlib
from config.using_config import  sha256_token, sha256_account
from urllib.parse import urlencode
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad



def get_g_token_sha256(g_time, params):
    secret = sha256_token
    sha256_str = secret + params + str(g_time)
    g_token = hashlib.sha256(sha256_str.encode('utf-8')).hexdigest()
    return g_token

def get_auth_user(user_id):
    """获取用户拥有所有用户(包括自己)的权限"""
    g_time = int(time.time())
    base_url = 'https://api.zanxiangnet.com'
    params = f'/erp/api/user/subUser/3/{user_id}'
    print(params)
    g_token = get_g_token_sha256(g_time, params)
    params_other_urlencode = urlencode({'g_time': g_time, 'g_token': g_token, 'g_account': sha256_account})
    url = base_url + params + '?' + params_other_urlencode
    rsp = requests.get(url)
    nick_name_list = []
    for _ in rsp.json()['data']:
        nick_name_list.append(_['nickName'])
    return nick_name_list


def get_auth_channel_self(user_id):
    g_time = int(time.time())
    base_url = 'https://api.zanxiangnet.com'
    params = '/erp/api/resource/search/3'
    g_token = get_g_token_sha256(g_time, params)
    params_other_urlencode = urlencode({'g_time': g_time, 'g_token': g_token, 'g_account': sha256_account})
    params_other = f'?userIds={user_id}'
    url = base_url + params + params_other + '&' + params_other_urlencode
    rsp = requests.get(url)
    channel_list = rsp.json()['data']
    data1 = []
    if channel_list:
        for _ in channel_list:
            data1.append(_['resourceName'])

    return tuple(data1)


def get_auth_channel(user_id):
    """获取用户拥有的所有公众号权限"""

    db = MysqlUtils()
    # 普通权限------java,获取本人对应拥有的公众号
    g_time = int(time.time())
    base_url = 'https://api.zanxiangnet.com'
    params = f'/erp/api/resource/subUserResourceList/3/{user_id}/投手,运营'
    g_token = get_g_token_sha256(g_time, params)
    params_other_urlencode = urlencode({'g_time': g_time, 'g_token': g_token, 'g_account': sha256_account})
    # 防止urlencode自动换行
    params_other_urlencode = params_other_urlencode.replace('%0A', '')
    url = base_url + params + '?' + params_other_urlencode
    rsp = requests.get(url)
    channel_list = rsp.json()['data']
    data1 = []
    if channel_list:
        for _ in channel_list:
            data1.append(_['resourceName'])

    sql2 = f"""select GROUP_CONCAT(channel_ids) from user_channel_group_auth a
                left join channel_group b on a.channel_group_id=b.id
                where user_id={user_id}"""
    data2 = db.quchen_text.getOne(sql2)

    data3 = []
    if data2:
        g_time = int(time.time())
        base_url = 'https://api.zanxiangnet.com'
        params = '/erp/api/resource/search/3'
        g_token = get_g_token_sha256(g_time, params)
        params_other_urlencode = urlencode({'g_time': g_time, 'g_token': g_token, 'g_account': sha256_account})
        url = base_url + params + '?' + params_other_urlencode
        rsp = requests.get(url)
        channel_list = []
        channel_dict = {}
        for _ in rsp.json()['data']:
            channel_list.append((_['id'], _['resourceName']))
            channel_dict[_['id']] = _['resourceName']
        data2_2 = tuple(data2.split(','))

        for _ in data2_2:
            data3.append(channel_dict[int(_)])
    return tuple(data1 + data3)


def get_auth_game_info(user_id):
    """获取用户拥有的所有用户拥有的游戏"""
    ck = CkUtils()

    # 1.获取用户名字
    g_time = int(time.time())
    base_url = 'https://api.zanxiangnet.com'
    params = '/erp/api/user/search/3'
    g_token = get_g_token_sha256(g_time, params)
    params_other_urlencode = urlencode({'g_time': g_time, 'g_token': g_token, 'g_account': sha256_account})
    url = base_url + params + '?' + params_other_urlencode
    rsp = requests.get(url)

    user_name = None
    for _ in rsp.json()['data']:
        if str(_['userId']) == str(user_id):
            user_name = _['nickName']
    print(user_name)
    # 2.获取所有游戏id

    '''
        SELECT d.id ,d.name,min(DATE_FORMAT(a.start_date,"%Y-%m-%d"))
       FROM quchen_text.advertiser_vx a
                                left join db_mp.mp_mp_conf b on  a.name =b.wx_name 
                                left join db_mp.mp_conf_agent c on c.advertiser_conf_id = b.id
                                left join db_mp.h_game d on c.app_id = d.id
        where pitcher ='{user_name}' and d.id is not null
        group by id
        '''
    sql = f'''
        
        SELECT d.id ,d.name,toUnixTimestamp(concat(toString(min(a.start_date)),' 00:00:00'),'Asia/Shanghai')
       FROM CostSourceData.advertiser_vx a
		left join GameDataSum.mp_mp_conf_sum b on  a.name =b.wx_name 
		left join GameDataSum.mp_conf_agent_sum c on c.advertiser_conf_id = b.id
		left join GameDataSum.h_game_sum d on c.app_id = d.id
		where LENGTH (d.id)>0  and a.pitcher = '{user_name}'
        group by d.id,d.name
        
    '''
    data_res = ck.execute(sql)

    # user_ids = db.quchen_text.get_data_list(sql)
    return data_res


def get_auth_game_name(user_id):
    """获取用户拥有的所有用户拥有的游戏"""
    db = MysqlUtils()
    # 1.获取用户名字
    g_time = int(time.time())
    base_url = 'https://api.zanxiangnet.com'
    params = '/erp/api/user/search/3'
    g_token = get_g_token_sha256(g_time, params)
    params_other_urlencode = urlencode({'g_time': g_time, 'g_token': g_token, 'g_account': sha256_account})
    url = base_url + params + '?' + params_other_urlencode
    rsp = requests.get(url)
    user_name = None
    for _ in rsp.json()['data']:
        if str(_['userId']) == str(user_id):
            user_name = _['nickName']
    # 2.获取所有游戏id
    sql = f'''
   SELECT d.name 
       FROM quchen_text.advertiser_vx a
                                left join db_mp.mp_mp_conf b on  a.name =b.wx_name 
                                left join db_mp.mp_conf_agent c on c.advertiser_conf_id = b.id
                                left join db_mp.h_game d on c.app_id = d.id
        where pitcher ='{user_name}' and d.name is not null
        group by name
    '''
    user_ids = db.quchen_text.get_data_list(sql)
    return user_ids


def super_auth():
    "获取超级数据权限的用户列表"
    g_time = int(time.time())
    base_url = 'https://api.zanxiangnet.com'
    params = '/erp/api/user/search/3'
    g_token = get_g_token_sha256(g_time, params)
    params_other_urlencode = urlencode({'g_time': g_time, 'g_token': g_token, 'g_account': sha256_account})
    url = base_url + params + '?' + params_other_urlencode
    rsp = requests.get(url)
    print(rsp.text)
    user_list = []
    for _ in rsp.json()['data']:
        if _['powerLevel'] >= 99:
            user_list.append(_['userId'])
    print(user_list)
    return user_list


if __name__ == '__main__':
    print(get_auth_game_name(85))
    # print(get_role(78))
    # print(f"ssed{tuple([1, 3, 4])}")
    # xx = super_auth()
    # print(xx)