#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(mid, data, size, top_K, flow_pool_P, env_dict=None):
    recall_list = []
    vidKeys = []
    feature_dict = {}
    # defult value
    apptype = 4
    pagesource = ""
    versioncode = "580"
    machineinfo_brand="HUAWEI"
    recommendsource = "0"
    machineinfo_platform = 'android'
    sencetype = 100078
    machineinfo_model ='M2006C3LC'
    if env_dict and len(env_dict)>0:
        apptype = env_dict.get('app_type',4)
        pagesource = env_dict.get('pagesource', '')
        versioncode = env_dict.get('versioncode', 0)
        machineinfo_brand = env_dict.get('machineinfo_brand', '')
        machineinfo_model = env_dict.get('machineinfo_model', '')
        recommendsource = env_dict.get('recommendsource', '0')
        machineinfo_platform = env_dict.get('machineinfo_platform', '')
        sencetype = env_dict.get('sencetype', '')
    redisObj = RedisHelper()
    pre_str = "v_ctr:"
    hour_pre_str = "v_hour_ctr:"
    hour_vidKeys = []
    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(int(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))
        hour_vidKeys.append(hour_pre_str+str(vid))
        recall_list.append(recall_item)
    #print("vidKeys:", vidKeys)
    video_static_info = redisObj.get_batch_key(vidKeys)
    video_hour_static_info = redisObj.get_batch_key(hour_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(float(per_video_staic[0]))
                    day_share_return_score_list.append(float(per_video_staic[1]))
                    day_share_score_list.append(float(per_video_staic[2]))
                    day_return_rate_list.append(float(per_video_staic[3]))
                    day_ctr_score_list.append(float(per_video_staic[4]))
                    day_view_users_list.append(int(per_video_staic[5]))
                    day_view_pv_list.append(int(per_video_staic[6]))
                    day_play_users_list.append(int(per_video_staic[7]))
                    day_play_pv_list.append(int(per_video_staic[8]))
                    day_share_users.append(int(per_video_staic[9]))
                    day_share_pv_list.append(int(per_video_staic[10]))
                    day_return_users_list.append(int(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)
    hour_rov_list = []
    hour_share_score_list =[]
    if video_hour_static_info:
        for i in range(len(video_hour_static_info)):
            try:
                # print(video_scores[i])
                vid = hour_vidKeys[i].replace(hour_pre_str,"")
                if video_hour_static_info[i] :
                    per_hour_video_staic = json.loads(video_hour_static_info[i])
                    hour_rov_list.append(float(per_hour_video_staic[0]))
                    hour_share_score_list.append(float(per_hour_video_staic[2]))
                else:
                    hour_rov_list.append(0.0)
                    hour_share_score_list.append(0.0)
            except Exception:
                    hour_rov_list.append(0.0)
                    hour_share_score_list.append(0.0)
    else:
        for i in range(len(recall_list)):
            hour_rov_list.append(0.0)
            hour_share_score_list.append(0.0)
    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
    feature_dict["hour_rov_list"] = hour_rov_list
    feature_dict["hour_share_score_list"] = hour_share_score_list
    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"],
                    "hour_rov_list": feature_dict["hour_rov_list"],
                    "hour_share_score_list": feature_dict["hour_share_score_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