#coding utf-8
from db_helper import RedisHelper
from config import set_config
from  utils import  request_post_data
import json
from log import Log
log_ = Log()


config_ = set_config()
def get_featurs(data, size, top_K, flow_pool_P, env_dict=None):
    recall_list = []
    vidKeys = []
    feature_dict = {}
    # defult value
    apptype = 0
    pagesource = "iLife-pages/user-videos-share-recommend"
    versioncode = 580
    machineinfo_brand="HUAWEI"
    recommendsource = "0"
    machineinfo_platform = 'android'
    sencetype = 100078
    mid = 'test1'
    machineinfo_model ='M2006C3LC'
    if env_dict:
        apptype = env_dict.get('app_type','')
        pagesource = env_dict.get('pagesource', '')
        versioncode = env_dict.get('versioncode', '')
        machineinfo_brand = env_dict.get('machineinfo_brand', '')
        machineinfo_model = env_dict.get('machineinfo_model', '')
        recommendsource = env_dict.get('recommendsource', '')
        machineinfo_platform = env_dict.get('machineinfo_platform', '')
        sencetype = env_dict.get('sencetype', '')
    redisObj = RedisHelper()
    pre_str = "v_ctr:"
    mid_list = []
    videoid_list = []
    apptype_list = []
    pagesource_list = []
    versioncode_list = []
    machineinfo_brand_list = []
    machineinfo_model_list = []
    recommendsource_list = []
    machineinfo_platform_list = []
    sencetype_list = []
    day_rov_list = []
    day_share_return_score_list = []
    day_share_score_list = []
    day_return_rate_list = []
    day_ctr_score_list = []
    day_play_pv_list = []
    day_play_users_list = []
    day_return_users_list = []
    day_share_pv_list = []
    day_view_pv_list = []
    day_view_users_list = []
    day_share_users = []
    for recall_item in data['rov_pool_recall']:
        if len(recall_item)<=0:
            continue
        vid = recall_item.get("videoId",0)
        mid_list.append(mid)
        videoid_list.append(vid)
        apptype_list.append(apptype)
        pagesource_list.append(pagesource)
        versioncode_list.append(versioncode)
        machineinfo_brand_list.append(machineinfo_brand)
        machineinfo_model_list.append(machineinfo_model)
        recommendsource_list.append(recommendsource)
        machineinfo_platform_list.append(machineinfo_platform)
        sencetype_list.append(sencetype)
        vidKeys.append(pre_str + str(vid))
        recall_list.append(recall_item)
    video_static_info = redisObj.get_batch_key(vidKeys)
    print("video_static_info:",video_static_info)
    if video_static_info:
        for i in range(len(video_static_info)):
            try:
                # print(video_scores[i])
                vid = vidKeys[i].replace(pre_str,"")
                if video_static_info[i] :
                    per_video_staic = json.loads(video_static_info[i])
                    day_rov_list.append(per_video_staic[0])
                    day_share_return_score_list.append(per_video_staic[1])
                    day_share_score_list.append(per_video_staic[2])
                    day_return_rate_list.append(per_video_staic[3])
                    day_ctr_score_list.append(per_video_staic[4])
                    day_view_users_list.append(per_video_staic[5])
                    day_view_pv_list.append(per_video_staic[6])
                    day_play_users_list.append(per_video_staic[7])
                    day_play_pv_list.append(per_video_staic[8])
                    day_share_users.append(per_video_staic[9])
                    day_share_pv_list.append(per_video_staic[10])
                    day_return_users_list.append(per_video_staic[11])
                else:
                    insert_static_default_fea(day_ctr_score_list, day_play_pv_list, day_play_users_list,
                                              day_return_rate_list, day_return_users_list, day_rov_list,
                                              day_share_pv_list, day_share_return_score_list, day_share_score_list,
                                              day_share_users, day_view_pv_list, day_view_users_list)
            except Exception:
                insert_static_default_fea(day_ctr_score_list, day_play_pv_list, day_play_users_list,
                                          day_return_rate_list, day_return_users_list, day_rov_list,
                                          day_share_pv_list, day_share_return_score_list, day_share_score_list,
                                          day_share_users, day_view_pv_list, day_view_users_list)
    else:
        for i in range(len(recall_list)):
            insert_static_default_fea(day_ctr_score_list, day_play_pv_list, day_play_users_list,
                                      day_return_rate_list, day_return_users_list, day_rov_list,
                                      day_share_pv_list, day_share_return_score_list, day_share_score_list,
                                      day_share_users, day_view_pv_list, day_view_users_list)
    feature_dict["mid_list"] = mid_list
    feature_dict["videoid_list"] = videoid_list
    feature_dict["apptype_list"]  = apptype_list
    feature_dict["pagesource_list"] = pagesource_list
    feature_dict["versioncode_list"] = versioncode_list
    feature_dict["machineinfo_brand_list"] = machineinfo_brand_list
    feature_dict["machineinfo_model_list"] = machineinfo_model_list
    feature_dict["recommendsource_list"] = recommendsource_list
    feature_dict["machineinfo_model_list"] = machineinfo_model_list
    feature_dict["machineinfo_platform_list"] = machineinfo_platform_list
    feature_dict["sencetype_list"] = sencetype_list
    feature_dict["day_rov_list"] = day_rov_list
    feature_dict["day_share_return_score_list"] = day_share_return_score_list
    feature_dict["day_share_score_list"] = day_share_score_list
    feature_dict["day_return_rate_list"] = day_return_rate_list
    feature_dict["day_ctr_score_list"] = day_ctr_score_list
    feature_dict["day_ctr_score_list"] = day_ctr_score_list
    feature_dict["day_play_pv_list"] = day_play_pv_list
    feature_dict["day_play_users_list"] = day_play_users_list
    feature_dict["day_return_users_list"] = day_return_users_list
    feature_dict["day_share_pv_list"] = day_share_pv_list
    feature_dict["day_view_pv_list"] = day_view_pv_list
    feature_dict["day_view_users_list"] = day_view_users_list
    feature_dict["day_share_users_list"] = day_share_users
    return feature_dict, recall_list


def insert_static_default_fea(day_ctr_score_list, day_play_pv_list, day_play_users_list, day_return_rate_list,
                              day_return_users_list, day_rov_list, day_share_pv_list, day_share_return_score_list,
                              day_share_score_list, day_share_users, day_view_pv_list, day_view_users_list):
    day_rov_list.append(0.0)
    day_share_return_score_list.append(0.0)
    day_share_score_list.append(0.0)
    day_return_rate_list.append(0.0)
    day_ctr_score_list.append(0.0)
    day_view_users_list.append(0)
    day_view_pv_list.append(0)
    day_play_users_list.append(0)
    day_play_pv_list.append(0)
    day_share_users.append(0)
    day_share_pv_list.append(0)
    day_return_users_list.append(0)


def get_tf_serving_sores(feature_dict):
    #for k, v in feature_dict:
    inputs_data = {
                    "mid": feature_dict["mid_list"],
                    "videoid": feature_dict["videoid_list"],
                    "apptype": feature_dict["apptype_list"],
                    "pagesource": feature_dict["pagesource_list"],
                    "versioncode": feature_dict["versioncode_list"],
                    "machineinfo_brand": feature_dict["machineinfo_brand_list"],
                    "machineinfo_model": feature_dict["machineinfo_model_list"],
                    "recommendsource": feature_dict["recommendsource_list"],
                    "machineinfo_platform": feature_dict["machineinfo_platform_list"],
                    "sencetype": feature_dict["sencetype_list"],
                    "day_rov": feature_dict["day_rov_list"],
                    "day_share_return_score": feature_dict["day_share_return_score_list"],
                    "day_share_score": feature_dict["day_share_score_list"],
                    "day_return_rate": feature_dict["day_return_rate_list"],
                    "day_ctr_score": feature_dict["day_ctr_score_list"],
                    "day_play_pv": feature_dict["day_play_pv_list"],
                    "day_play_users": feature_dict["day_play_users_list"],
                    "day_share_pv": feature_dict["day_share_pv_list"],
                    "day_return_users": feature_dict["day_return_users_list"],
                    "day_share_users": feature_dict["day_share_users_list"],
                    "day_view_pv": feature_dict["day_view_pv_list"],
                    "day_view_users":feature_dict["day_view_users_list"]
    }
    request_data_dict= {}
    request_data_dict["inputs"] = inputs_data
    #print(request_data_dict)
    request_data= json.dumps(request_data_dict)
    #print(request_data)
    # 调用http接口
    result = request_post_data(config_.TF_SERVING_URL,request_data, timeout=(0.1, 1))

    # print("result:", result)
    if result is None:
        print("result is None")
        log_.info('call tf serving error,types: {}')
        return []
    print(result)
    return result