import datetime
from utils import RedisHelper
from config import set_config
config_ = set_config()
redis_helper = RedisHelper()


def ad_recommend_predict(mid, video_id):
    """
    广告推荐预测
    :param mid: mid
    :param video_id: video_id
    :return: ad_predict, type-int, 1-不发放广告,2-发放广告
    """
    now_date = datetime.datetime.today()
    now_dt = datetime.datetime.strftime(now_date, '%Y%m%d')
    # 判断mid所属分组
    mid_group_key_name = f"{config_.KEY_NAME_PREFIX_MID_GROUP}{mid}"
    mid_group = redis_helper.get_data_from_redis(key_name=mid_group_key_name)
    if mid_group is None:
        mid_group = 'mean_group'
    # 获取用户组分享率
    group_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{now_dt}"
    if not redis_helper.key_exists(group_share_rate_key):
        redis_dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
        group_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_GROUP}{redis_dt}"
    group_share_rate = redis_helper.get_score_with_value(key_name=group_share_rate_key, value=mid_group)
    # 获取视频分享率
    video_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{now_dt}"
    if not redis_helper.key_exists(video_share_rate_key):
        redis_dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
        video_share_rate_key = f"{config_.KEY_NAME_PREFIX_AD_VIDEO}{redis_dt}"
    video_share_rate = redis_helper.get_score_with_value(key_name=video_share_rate_key, value=int(video_id))
    if video_share_rate is None:
        video_share_rate = redis_helper.get_score_with_value(key_name=video_share_rate_key, value=-1)

    # 计算 mid-video 分享率
    mid_video_share_rate = float(group_share_rate) * float(video_share_rate)

    # 获取对应的阈值
    threshold_key_name = f"{config_.KEY_NAME_PREFIX_AD_THRESHOLD}{mid_group}"
    threshold = redis_helper.get_data_from_redis(key_name=threshold_key_name)
    if threshold is None:
        threshold = 0
    else:
        threshold = float(threshold)
    # 阈值判断
    if mid_video_share_rate > threshold:
        ad_predict = 2
    else:
        ad_predict = 1
    result = {
        'mid_group': mid_group,
        'group_share_rate': group_share_rate,
        'video_share_rate': video_share_rate,
        'mid_video_share_rate': mid_video_share_rate,
        'threshold': threshold,
        'ad_predict': ad_predict}
    return result