import requests
import time
from urllib.parse import urlencode
from config.using_config import sha256_token, sha256_account
from model.UserAuthUtils import get_g_token_sha256
from model.DateUtils import DateUtils
from model.DataBaseUtils import *
from model.UserAuthUtils import super_auth

du = DateUtils()


def user_channel(arg):
    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 = []
    for _ in rsp.json()['data']:
        channel_list.append({'id': _['id'], 'nick_name': _['resourceName']})
    return channel_list


def user_channel_group(arg):
    db = MysqlUtils()

    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_dict = {}
    for _ in rsp.json()['data']:
        channel_dict[str(_['id'])] = _['resourceName']
    user_id = arg.get('user_id')
    if user_id:
        sql = f"""SELECT  id,name,channel_ids from channel_group where id in  
               (select channel_group_id from user_channel_group_auth where user_id={user_id})"""
    else:
        # 不传user_id 返回所有组
        sql = "select id,name,channel_ids from channel_group"
    data = db.quchen_text.getData_json(sql)
    for i in data:
        sr = ''
        for j in i['channel_ids'].split(','):
            sr += channel_dict[j] + ','
        i['channel_names'] = sr
    return data


def user(arg):
    # 在2021-9月之后不被前端使用
    # 返回所有用户
    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_list = []
    for _ in rsp.json()['data']:
        user_list.append({'user_id': _['userId'], 'nick_name': _['nickName']})
    return user_list


def group_add(arg):
    db = MysqlUtils()
    name = arg.get("name")
    ids = arg.get("channel_ids")
    if name and ids:
        sql = "insert into channel_group (name,channel_ids)  values (%s,%s)"
        db.quchen_text.execute(sql, (name, ids))


def group_del(arg):
    db = MysqlUtils()
    id = arg.get("id")

    if id:
        sql = f"delete from  channel_group where id={id}"
        db.quchen_text.execute(sql)


def group_auth_add(arg):
    db = MysqlUtils()
    user_id = arg.get("user_id")
    group_id = arg.get("group_id")
    if user_id and group_id:
        sql = "insert into user_channel_group_auth (user_id,channel_group_id)  values (%s,%s)"
        db.quchen_text.execute(sql, (user_id, group_id))


def group_auth_del(arg):
    db = MysqlUtils()
    user_id = arg.get("user_id")
    group_id = arg.get("group_id")
    if user_id and group_id:
        sql = f"delete from  user_channel_group_auth where user_id={user_id} and channel_group_id={group_id}"
        db.quchen_text.execute(sql)


def get_channel(arg):
    db = MysqlUtils()
    user_id = arg.get('user_id')
    name_cahnnel = arg.get('name')
    pitcher_id = arg.get('pitcher_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})
    url = base_url + params + '?' + params_other_urlencode
    rsp = requests.get(url)
    channel_list_all = []
    channel_dict = {}
    for _ in rsp.json()['data']:
        # channel_list.append((_['id'], _['nickName']))
        if name_cahnnel and name_cahnnel in _['resourceName']:
            channel_list_all.append({'id': _['id'], 'nick_name': _['resourceName']})
        if not name_cahnnel:
            channel_list_all.append({'id': _['id'], 'nick_name': _['resourceName']})
        channel_dict[_['id']] = _['resourceName']

    if user_id in super_auth() and not pitcher_id:
        # return channel_list_all[:100]
        return channel_list_all
    select_id = user_id
    # 通过pitcher_id,来添加
    if pitcher_id:
        select_id = pitcher_id

    # 普通权限------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)

    data1 = []
    for _ in rsp.json()['data']:
        # for可替换这个,下面的for循环未找到原因为何这样写,暂时以下面为主
        # if name_cahnnel in _['resourceName']:
        # if name_cahnnel and name_cahnnel in _['resourceName']:
        #     print("1----------->" + _['resourceName'])
        #     data1.append({'id': _['id'], 'nick_name': _['resourceName']})
        # if not name_cahnnel:
        #     print("2----------->" + _['resourceName'])
        #     data1.append({'id': _['id'], 'nick_name': _['resourceName']})

        if name_cahnnel and name_cahnnel in _['resourceName']:
            if not name_cahnnel in _['resourceName']:
                data1.append({'id': _['id'], 'nick_name': _['resourceName']})
            elif name_cahnnel in _['nickName']:
                data1.append({'id': _['id'], 'nick_name': _['resourceName']})
        if not name_cahnnel:
            data1.append({'id': _['id'], 'nick_name': _['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={select_id}"""
    # data2 = db.quchen_text.getOne(sql2)
    # data3 = []
    # if data2:
    #     data2_2 = tuple(data2.split(','))
    #     for _ in data2_2:
    #         data3.append({'id': int(_), 'nick_name': channel_dict[int(_)]})
    # data4=[]
    # data4 = data1 + data3
    return data1


def get_pitcher(arg):
    user_id = arg.get('user_id')
    if user_id in super_auth():
        user_list = []
        g_time = int(time.time())
        base_url = 'https://api.zanxiangnet.com'
        params = '/erp/api/user/search/3'
        params_others = '?resourceTags=投手'
        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_others + '&' + params_other_urlencode
        rsp = requests.get(url)

        for _ in rsp.json()['data']:
            user_list.append({'user_id': _['userId'], 'nick_name': _['nickName']})
        return user_list

    user_list = []
    g_time = int(time.time())
    base_url = 'https://api.zanxiangnet.com'
    params = f'/erp/api/user/subUser/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})
    url = base_url + params + '?' + params_other_urlencode
    rsp = requests.get(url)

    for _ in rsp.json()['data']:
        user_list.append({'user_id': _['userId'], 'nick_name': _['nickName']})
    return user_list


def get_user_name_by_id(user_id):
    g_time = int(time.time())
    base_url = 'https://api.zanxiangnet.com'
    params = f'/erp/api/user/subUser/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})
    url = base_url + params + '?' + params_other_urlencode
    rsp = requests.get(url)
    nick_name = None

    for _ in rsp.json()['data']:
        if str(_['userId']) == str(user_id):
            nick_name = _['nickName']
    return nick_name


if __name__ == '__main__':
    print(get_channel({'user_id': 78}))
    # print(get_user_name_by_id({'user_id':78,'name':''}))
    # print(get_user_name_by_id(78))