# 请求vc店铺的所有接口
import json
import time

import pymysql
import redis

from common import request_to_jd_vc
from common import request_to_jd_vc_dev

config_dev = {
    "mysql": {
        "host": "192.168.1.238",
        "port": 3306,
        "user": "liexin_data_distribution",
        "password": "liexin_data_distribution#zsyM",
        "database": "liexin_data_distribution"
    },
    "redis": {
        "host": "192.168.1.235",
        "port": 6379,
        "password": "icDb29mLy2s"
    }
}

config_prod = {
    "mysql": {
        "host": "bigdata2.ichunt.db",
        "port": 3306,
        "user": "DsbuUx",
        "password": "sfj09JjsfpQx0",
        "database": "liexin_data_distribution"
    },
    "redis": {
        "host": "172.18.137.38",
        "port": 6379,
        "password": "icDb29mLy2s"
    }
}


def get_vc_audit(applyId: str):
    """根据应用id 查找审核状态(若审核成功可以获得京东sku_id)"""
    method_name = "jingdong.vc.item.product.apply.get"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {
        "applyId": applyId,
    }
    ans = request_to_jd_vc(method_name, token, app_key, app_secret, param)
    print(json.dumps(ans, ensure_ascii=False))
    return ans


def insert_vc_class(conf: dict):
    method_name = "jingdong.vc.item.categories.find"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {}
    ans = request_to_jd_vc(method_name, token, app_key, app_secret, param)
    results = ans["jingdong_vc_item_categories_find_responce"]["jos_result_dto"]["result"]
    host = conf["mysql"]["host"]
    port = conf["mysql"]["port"]
    user = conf["mysql"]["user"]
    password = conf["mysql"]["password"]
    database = conf["mysql"]["database"]
    db = pymysql.connect(host=host, port=port, user=user, password=password, database=database)
    cursor = db.cursor()
    for i in range(len(results)):
        parent_id = results[i]["cid3"]
        class_id = results[i]["id"]
        class_name = results[i]["name"]
        depth = results[i]["depth"]
        status = 1
        platform = 1
        create_time = int(time.time())
        # check if already exist.
        check_sql = "select class_id from lie_shop_class where class_id = %s"
        cursor.execute(query=check_sql, args=(class_id,))
        check_result = cursor.fetchall()
        if len(check_result) > 0:
            continue
        insert_sql = "insert into lie_shop_class (parent_id, class_id, class_name, depth, status, platform, create_time) values (%s, %s, %s, %s, %s, %s, %s)"
        cursor.execute(query=insert_sql, args=(parent_id, class_id, class_name, depth, status, platform, create_time,))
        db.commit()
        print(insert_sql % (parent_id, class_id, class_name, depth, status, platform, create_time))


def insert_vc_attr(conf: dict):
    """lie_shop_class中拿vc class_id 插入属性"""
    select_sql = "select class_id from lie_shop_class where platform = 1"
    host = conf["mysql"]["host"]
    port = conf["mysql"]["port"]
    user = conf["mysql"]["user"]
    password = conf["mysql"]["password"]
    database = conf["mysql"]["database"]
    method_name = "jingdong.vc.item.props.find"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    db = pymysql.connect(host=host, port=port, user=user, password=password, database=database)
    cursor = db.cursor()
    cursor.execute(query=select_sql)
    db_results = cursor.fetchall()
    for i in range(len(db_results)):
        class_id = db_results[i][0]
        param = {
            "category_leaf_id": class_id
        }
        ans = request_to_jd_vc(method_name=method_name, token=token, app_key=app_key, app_secret=app_secret,
                               param=param)
        print(json.dumps(ans, ensure_ascii=False))
        if "result" not in ans["jingdong_vc_item_props_find_responce"]["jos_result_dto"]:
            continue
        jd_results = ans["jingdong_vc_item_props_find_responce"]["jos_result_dto"]["result"]
        for j in range(len(jd_results)):
            result = jd_results[j]
            props = result["props"]
            for k in range(len(props)):
                prop = props[k]
                attr_id = prop["id"]
                attr_name = prop["name"]
                unit = prop["val_unit"]
                input_type = prop["input_type"]
                platform = 1
                status = 1
                if not prop["required"]:
                    is_required = 0
                else:
                    is_required = 1
                enum_value = "[]"
                if input_type == 1 or input_type == 2:
                    # 单选或者多选 把选项取出来
                    tmp_value_list = []
                    values = prop["values"]
                    for index in range(len(values)):
                        attr_value_id = values[index]["id"]
                        attr_value_name = values[index]["name"]
                        item_map = {
                            "attr_value_id": attr_value_id,
                            "attr_value_name": attr_value_name,
                        }
                        tmp_value_list.append(item_map)
                    enum_value = json.dumps(tmp_value_list, ensure_ascii=False)
                elif input_type == 3:
                    # 文本类型
                    # 文本类型没有可选值
                    pass
                elif input_type == 7:
                    # 数值类型
                    # 数值类型没有可选值
                    pass
                elif input_type == 10:
                    # 多单位多解析的方式
                    # 多单位多解析 需要特殊处理单位字段
                    tmp_unit_list = []
                    values = prop["values"]
                    for index in range(len(values)):
                        if "units" in values[index]:
                            unit_list = values[index]["units"]
                            for x in range(len(unit_list)):
                                tmp_unit_list.append(unit_list[x])
                    unit = json.dumps(tmp_unit_list, ensure_ascii=False)
                else:
                    print("此input_type类型暂未兼容处理!请单独处理!")
                create_time = int(time.time())
                insert_sql = "insert into lie_shop_attr (class_id, attr_id, attr_name, unit, enum_value, input_type, is_required, status, platform, create_time) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
                cursor.execute(query=insert_sql, args=(
                class_id, attr_id, attr_name, unit, enum_value, input_type, is_required, status, platform,
                create_time,))
                db.commit()
                print(insert_sql % (
                class_id, attr_id, attr_name, unit, enum_value, input_type, is_required, status, platform, create_time))


def insert_vc_ext_attr(conf: dict):
    """
    基于lie_shop_attr中的class_id来更新 “拓展” 属性
    """
    host = conf["mysql"]["host"]
    port = conf["mysql"]["port"]
    user = conf["mysql"]["user"]
    password = conf["mysql"]["password"]
    database = conf["mysql"]["database"]
    method_name = "jingdong.vc.item.extProps.find"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    select_sql = "select class_id from lie_shop_class where platform = 1"
    db = pymysql.connect(host=host, port=port, user=user, password=password, database=database)
    cursor = db.cursor()
    cursor.execute(query=select_sql)
    db_results = cursor.fetchall()
    for i in range(len(db_results)):
        class_id = db_results[i][0]
        param = {
            "category_leaf_id": class_id,
        }
        ans = request_to_jd_vc(method_name=method_name, token=token, app_key=app_key, app_secret=app_secret,
                               param=param)
        if "result" not in ans["jingdong_vc_item_extProps_find_responce"]["jos_result_dto"]:
            continue
        jd_results = ans["jingdong_vc_item_extProps_find_responce"]["jos_result_dto"]["result"]
        for j in range(len(jd_results)):
            result = jd_results[j]
            flag = result["is_required"]
            is_required = flag
            attr_id = result["att_id"]
            attr_name = result["name"]
            unit = result["val_unit"]
            status = 1
            platform = 1
            create_time = int(time.time())
            input_type = result["input_type"]
            enum_value = "[]"
            # 根据 input_type 不同类型分别处理
            if input_type == 1 or input_type == 2:
                # 单选或者多选,获取选项值
                ext_prop_value = result["ext_prop_value"]
                tmp_list_value = []
                for k in range(len(ext_prop_value)):
                    value = ext_prop_value[k]
                    attr_value_id = value["value_id"]
                    attr_value_name = value["value_name"]
                    item = {
                        "attr_value_id": attr_value_id,
                        "attr_value_name": attr_value_name
                    }
                    tmp_list_value.append(item)
                enum_value = json.dumps(tmp_list_value, ensure_ascii=False)
            elif input_type == 3:
                # 文本类型,无选项值
                pass
            else:
                print("暂时未兼容此种类型的拓展属性 input_type: " + str(input_type))
            insert_sql = "insert into lie_shop_attr (class_id, attr_id, attr_name, unit, enum_value, input_type, is_required, status, platform, create_time) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
            cursor.execute(query=insert_sql, args=(
            class_id, attr_id, attr_name, unit, enum_value, input_type, is_required, status, platform, create_time,))
            db.commit()
            print(insert_sql % (
            class_id, attr_id, attr_name, unit, enum_value, input_type, is_required, status, platform, create_time))


def insert_ext_attr_to_redis(conf: dict):
    host = conf["mysql"]["host"]
    port = conf["mysql"]["port"]
    user = conf["mysql"]["user"]
    password = conf["mysql"]["password"]
    database = conf["mysql"]["database"]
    method_name = "jingdong.vc.item.extProps.find"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    select_sql = "select class_id from lie_shop_class where platform = 1"
    db = pymysql.connect(host=host, port=port, user=user, password=password, database=database)
    cursor = db.cursor()
    cursor.execute(query=select_sql)
    db_results = cursor.fetchall()
    class_attr_mapping = {}
    for i in range(len(db_results)):
        class_id = db_results[i][0]
        class_attr_mapping[class_id] = []
        param = {
            "category_leaf_id": class_id,
        }
        ans = request_to_jd_vc(method_name=method_name, token=token, app_key=app_key, app_secret=app_secret,
                               param=param)
        print("request to jd ....")
        if "result" not in ans["jingdong_vc_item_extProps_find_responce"]["jos_result_dto"]:
            continue
        jd_results = ans["jingdong_vc_item_extProps_find_responce"]["jos_result_dto"]["result"]
        for j in range(len(jd_results)):
            result = jd_results[j]
            attr_id = result["att_id"]
            class_attr_mapping[class_id].append(attr_id)
    redis_host = conf["redis"]["host"]
    redis_port = conf["redis"]["port"]
    redis_password = conf["redis"]["password"]
    redis_db = redis.Redis(host=redis_host, port=redis_port, password=redis_password)
    for class_id in class_attr_mapping:
        key = str(class_id)
        attr_ids = class_attr_mapping[class_id]
        if len(attr_ids) == 0:
            continue
        value = json.dumps(attr_ids, ensure_ascii=False)
        redis_db.hset(name="jd_ext_attr", key=key, value=value)
        print("jd_ext_attr", key, value)


# 此方法危险 不建议使用
# def delete_redis_key(key: str, conf: dict):
#     redis_host = conf["redis"]["host"]
#     redis_port = conf["redis"]["port"]
#     redis_password = conf["redis"]["password"]
#     redis_db = redis.Redis(host=redis_host, port=redis_port, password=redis_password)
#     redis_db.delete(key)


def update_vc_goods_attr():
    """
    vc店铺更新商品属性
    """
    method_name = "jingdong.vc.item.oldProduct.updateV2"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {
        "ware_id": "100124079781",
        "en_brand": "Kingbright",
        "zh_brand": "Kingbright",
        "pkg_info": "商品主体 * 1",
        "original_place": "中国大陆",
        "warranty": "无质保",
        "cid1": 33834,
        "brand_id": 823924,
        "name": "Kingbright LED点阵 TA12-11EWA 起订数1个",
        "item_num": "1151033371062413398",
        "saler_code": "maojingtao1",
        "purchaser_code": "maojingtao1",
        "prop_id": "274243,266140,275609,234941,270354",
        "prop_remark": "散装,9,9,tast,",
        "prop_vid": ",,,,1639267",
        "ext_id": "235849",
        "ext_values": "1336374",
        "main_path": "jfs/t1/232493/18/26763/19756/670d354fFa5efdaae/c3fe357ecb152ae7.jpg",
        "main_isPrimary": "1",
        "intro_html": "<img src=https://img30.360buyimg.com/sku/jfs/t1/133800/28/25551/94742/62fef403E1a77f3a2/9b92597c0c26d1c8.jpg' /><br>",
        "intro_mobile": "<img src=https://img30.360buyimg.com/sku/jfs/t1/133800/28/25551/94742/62fef403E1a77f3a2/9b92597c0c26d1c8.jpg' /><br>",
    }
    ans = request_to_jd_vc(method_name, token, app_key, app_secret, param)
    print(json.dumps(ans, ensure_ascii=False))


def set_vc_init_stock_and_delivery(stock_num, delivery_day, ware_id):
    method_name = "jingdong.productConfigSdkService.setProductConfig"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {
        "productConfigReq": {
            "productConfigInfoDtoList": [
                {
                    "@type": "com.jd.jdi.ivc.product.publish.sdk.dto.product.ProductConfigInfoDto",
                    "skuStockNum": stock_num,
                    "promiseDays": delivery_day,
                    "czFlag": 0,
                    "skuId": ware_id,
                }
            ]
        }
    }
    ans = request_to_jd_vc(method_name, token, app_key, app_secret, param)
    print(json.dumps(ans, ensure_ascii=False))


def modify_vc_stock_num(stock_num, ware_id):
    """
    修改vc商品库存
    """
    method_name = "jingdong.dropship.dps.modifyStockInfo"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {
        "sku": ware_id,
        "stockNum": stock_num
    }
    ans = request_to_jd_vc(method_name, token, app_key, app_secret, param)
    print(json.dumps(ans, ensure_ascii=False))


def get_vc_goods_info(ware_id: str):
    method_name = "jingdong.vc.item.product.get"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {
        "wareId": ware_id
    }
    ans = request_to_jd_vc(method_name, token, app_key, app_secret, param)
    print(json.dumps(ans, ensure_ascii=False))


def modify_jd_vc_market_price():
    """
    修改vc市场价,京东价
    """
    method_name = "jingdong.promotion.adjust.price.updatePrice"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {
        "operateRequest": {
            "skuPriceInfo": {
                "site": 301,
                "marketPrice": 199.30,
                "salePrice": 188.18,
                "skuId": 100151433074,
            },
            "venderInfo": {
                "supplierCode": "ichunt",
            },
            "applicant": "ichunt",
            "appReason": "调整价格测试",
        }
    }
    ans = request_to_jd_vc(method_name, token, app_key, app_secret, param)
    print(json.dumps(ans, ensure_ascii=False))


def modify_vc_purchase_price():
    method_name = "jingdong.pps.pub.api.PpsPriceChangePublicJosService"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {
        "basePriceChanges": [
            {
                "@type": "com.jd.pps.pub.dto.PpsBasePriceChangeDto",
                "lineKey": "1",
                "changeReason": "修改采购价格内部测试",
                # "discount": 13, 这个参数在文档中是必填,但是实际不用传。
                "orgId": -1,
                "vendorCode": "ichunt",
                "price": 100,
                "currency": "RMB",
                "sku": 100151433074,
            }
        ],
        "clientInfo": {

        }
    }
    ans = request_to_jd_vc(method_name, token, app_key, app_secret, param)
    print(json.dumps(ans, ensure_ascii=False))

"""
创建促销活动接口
"""
def create_vc_promotion():
    method_name = "jingdong.promo.activity.create"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {
        "request": {
            "baseRequest": {
                "@type": "com.jd.promo.activity.sdk.model.request.BaseRequest",
            },
            "activityDTO": {
                "@type": "com.jd.promo.activity.sdk.model.ActivityDTO",
                "activityBaseDTO": {
                    "@type": "com.jd.promo.activity.sdk.model.ActivityBaseDTO",
                    "name": "内部促销活动测试",
                    "type": 26,
                    "beginTime": "2024-11-05 00:14:00",
                    "endTime": "2024-11-05 06:14:00",
                    "bound": 1,
                    "venderType": 1,
                    "venderId": 10457263
                },
                "activityScopeDTO": {
                    "@type": "com.jd.promo.activity.sdk.model.ActivityScopeDTO",
                    "channelList": [
                        "1",
                    ],
                }
            }
        }
    }
    ans = request_to_jd_vc_dev(method_name, token, app_key, app_secret, param)
    print(json.dumps(ans, ensure_ascii=False))


"""
促销活动加品
"""
def vc_promotion_add_sku():
    method_name = "jingdong.promo.activity.addSkus"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {
        "request": {
            "baseRequest": {
                "@type": "com.jd.promo.activity.sdk.model.request.BaseRequest",
            },
            "activityParticipantDTO": {
                "@type": "com.jd.promo.activity.sdk.model.ActivityParticipantDTO",
                "bound": 1,
                "bindType": 1,
                "activityId": 3000001,
                "activitySkuDTOList": [
                    {
                        "@type": "com.jd.promo.activity.sdk.model.ActivitySkuDTO",
                        "skuId": 100124748677,
                        "skuName": "TAMURA 音频变压器 MET-46 起订数1个",
                        "skuBound": 1,
                        "skuBindType": 1,
                        "spuId": 101,
                        "originPrice": "100.18",
                    }
                ],
            }
        }
    }
    ans = request_to_jd_vc(method_name, token, app_key, app_secret, param)
    print(json.dumps(ans, ensure_ascii=False))


"""
提交促销活动接口
"""
def commit_vc_activity():
    method_name = "jingdong.promo.activity.commit"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {
        "activityId": 3000001
    }
    ans = request_to_jd_vc(method_name, token, app_key, app_secret, param)
    print(json.dumps(ans, ensure_ascii=False))


def delete_vc_activity():
    method_name = "jingdong.promo.activity.remove"
    token = "845ce8478b074103b9e78a769d5fa4831y2u"
    app_key = "CA52430E90209F51D8F5D7B615DDE9AD"
    app_secret = "c92691b2379c48de87e699c4c2f7fb32"
    param = {
        "activityId": 3000001
    }
    ans = request_to_jd_vc(method_name, token, app_key, app_secret, param)
    print(json.dumps(ans, ensure_ascii=False))



if __name__ == '__main__':
    set_vc_init_stock_and_delivery(stock_num=11, delivery_day=11, ware_id=100153434044)