# coding:utf-8
import os
# from log import Log
# log_ = Log()


class BaseConfig(object):
    # 产品标识
    APP_TYPE = {
        'VLOG': 0,  # vlog
        'LOVE_LIVE': 4,  # 票圈视频
        'LONG_VIDEO': 5,  # 内容精选
        'SHORT_VIDEO': 6,  # 票圈短视频
        'WAN_NENG_VIDEO': 17,  # 万能影视屋
        'LAO_HAO_KAN_VIDEO': 18,  # 老好看视频
        'ZUI_JING_QI': 19,  # 票圈最惊奇
        'APP': 13,  # 票圈视频APP
    }
    # 数据存放路径
    DATA_DIR_PATH = './data'

    # oss 目标Bucket
    BUCKET_NAME = 'ali-recommend'

    # ODPS服务配置
    ODPS_CONFIG = {
        'ENDPOINT': 'http://service.cn.maxcompute.aliyun.com/api',
        'ACCESSID': 'LTAIWYUujJAm7CbH',
        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
    }

    # 飞书机器人配置
    FEISHU_ROBOT = {
        'server_robot': {
            # webhook地址
            'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/8de4de35-30ed-4692-8854-7a154e89b2f2',
            # 自定义关键词key_word
            'key_word': '服务报警'
        },
        'feature_monitor_robot': {
            'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/0ca66b89-5e2b-4e89-a04a-a01fda31cc89',
            'key_word': 'ROV特征监控'
        }
    }

    # 训练数据截止时间距当前日期间隔天数
    TRAIN_DIFF = 7
    # 训练数据所需数据范围天数
    TRAIN_DELTA_DAYS = 30
    # 训练数据表名
    TRAIN_PROJECT = 'usercdm'
    TRAIN_TABLE = 'rov_feature_add_v1'
    # 训练数据文件存放路径
    TRAIN_DATA_FILENAME = 'train_data.pickle'

    # 预测数据截止时间距当前日期间隔天数
    PREDICT_DIFF = 1
    # 预测数据所需数据范围天数
    PREDICT_DELTA_DAYS = 1
    # 预测数据表名
    PREDICT_PROJECT = 'usercdm'
    PREDICT_TABLE = 'rov_predict_table_add_v1'
    # 预测数据文件存放路径
    PREDICT_DATA_FILENAME = 'predict_data.pickle'

    # 模型存放文件
    MODEL_FILENAME = 'model.pickle'

    # 运营给定App小时级更新数据表名
    APP_OP_PROJECT = 'loghubods'
    APP_OP_TABLE = 'category_video_list_test1'

    # 小程序小时级规则参数
    RULE_PARAMS = {
        # 'rule1': {'return_count': 20, 'score_rule': 0.005, 'platform_return_rate': 0.001},
        # 'rule2': {'return_count': 20, 'score_rule': 0.001},  # 下线
        # 'rule3': {'view_type': 'pre-view', 'return_count': 20, 'score_rule': 0.005, 'platform_return_rate': 0.001},
        # 'rule4': {'cal_score_func': 2, 'return_count': 20, 'score_rule': 0},  # 下线
        # 'rule5': {'cal_score_func': 3, 'return_count': 20, 'score_rule': 0},  # 下线
        'rule6': {'view_type': 'video-show', 'return_count': 20, 'score_rule': 0.005, 'platform_return_rate': 0.001},
    }

    # app_type: [18, 19]预测表名
    PREDICT_PROJECT_18_19 = {
        '18': 'loghubods',  # 老好看
        '19': 'loghubods',  # 最惊奇
    }
    PREDICT_TABLE_18_19 = {
        '18': 'haokan_video_list_each_hour_update',  # 老好看
        '19': 'amazed_video_list_each_hour_update',  # 最惊奇
    }
    # 预测数据文件存放路径
    PREDICT_DATA_FILENAME_18_19 = {
        '18': 'predict_data_18.pickle',
        '19': 'predict_data_19.pickle'
    }

    # 天级规则更新使用数据
    PROJECT_DAY = 'loghubods'
    TABLE_DAY = 'video_data_each_day_dataset'

    # 小程序天级规则参数
    RULE_PARAMS_DAY = {
        # 'rule1': {'return_count': 200},
        'rule2': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001},
    }

    # 小时级更新过去24h数据
    PROJECT_24H = 'loghubods'
    TABLE_24H = 'video_data_each_hour_dataset_24h_total'

    # 小时级更新过去24h数据规则参数
    RULE_PARAMS_24H = {
        # 'rule1': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001},
        'rule2': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001, 'view_type': 'preview'},
    }

    REGION_CODE = {
        '河北省': '130000', '山西省': '140000', '辽宁省': '210000', '吉林省': '220000', '黑龙江省': '230000', '江苏省': '320000',
        '浙江省': '330000', '安徽省': '340000', '福建省': '350000', '江西省': '360000', '山东省': '370000', '河南省': '410000',
        '湖北省': '420000', '湖南省': '430000', '广东省': '440000', '海南省': '460000', '四川省': '510000', '贵州省': '520000',
        '云南省': '530000', '陕西省': '610000', '甘肃省': '620000', '青海省': '630000', '台湾省': '710000', '北京': '110000',
        '天津': '120000', '内蒙古': '150000', '上海': '310000', '广西': '450000', '重庆': '500000', '西藏': '540000',
        '宁夏': '640000', '新疆': '650000', '香港': '810000', '澳门': '820000',
        'None': '-1'
    }

    # 地域分组小时级规则更新使用数据
    PROJECT_REGION = 'loghubods'
    TABLE_REGION = 'video_each_hour_update_province'

    # 地域分组小时级规则参数
    RULE_PARAMS_REGION = {
        # 'rule1': {'view_type': 'pre-view', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule1'},
        'rule2': {'view_type': 'video-show', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2'},
        'rule3': {'view_type': 'video-show-region', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2'},
    }

    # 地域分组天级规则更新使用数据
    PROJECT_REGION_DAY = 'loghubods'
    TABLE_REGION_DAY = 'video_each_day_update_province'

    # 地域分组天级规则参数
    RULE_PARAMS_REGION_DAY = {
        'rule1': {'view_type': 'pre-view', 'return_count': 21, 'score_rule': 0},
    }

    # 地域分组小时级更新24h使用数据
    PROJECT_REGION_24H = 'loghubods'
    TABLE_REGION_24H = 'video_each_day_update_province_24h_total'

    # 地域分组小时级更新24h规则参数
    RULE_PARAMS_REGION_24H = {
        # 'rule1': {'view_type': 'pre-view', 'return_count': 21, 'score_rule': 0, 'platform_return_rate': 0.001},
        'rule2': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0, 'platform_return_rate': 0.001},
    }

    # ##### 区分appType数据
    # 小时级更新过去24h数据 loghubods.video_data_each_hour_dataset_24h_total_apptype
    PROJECT_24H_APP_TYPE = 'loghubods'
    TABLE_24H_APP_TYPE = 'video_data_each_hour_dataset_24h_total_apptype'

    # 小时级更新过去24h数据规则参数
    RULE_PARAMS_24H_APP_TYPE = {
        APP_TYPE['VLOG']: {
            'rule_params': {
                'rule2': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
                          'view_type': 'preview'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
                'data2': [APP_TYPE['VLOG'], APP_TYPE['LOVE_LIVE'], APP_TYPE['LONG_VIDEO'], APP_TYPE['SHORT_VIDEO']],
            }
        },
        APP_TYPE['LONG_VIDEO']: {
            'rule_params': {
                'rule2': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
                          'view_type': 'preview'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
                'data2': [APP_TYPE['LONG_VIDEO'], ],
                'data3': [APP_TYPE['VLOG'], APP_TYPE['LONG_VIDEO'], ],
                'data4': [APP_TYPE['VLOG'], APP_TYPE['LOVE_LIVE'], APP_TYPE['LONG_VIDEO'], APP_TYPE['SHORT_VIDEO']],
            }
        },
        APP_TYPE['LOVE_LIVE']: {
            'rule_params': {
                'rule2': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
                          'view_type': 'preview'},

            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['SHORT_VIDEO']: {
            'rule_params': {
                'rule2': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
                          'view_type': 'preview'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['LAO_HAO_KAN_VIDEO']: {
            'rule_params': {
                'rule2': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
                          'view_type': 'preview'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['ZUI_JING_QI']: {
            'rule_params': {
                'rule2': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
                          'view_type': 'preview'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['APP']: {
            'rule_params': {
                'rule2': {'cal_score_func': 2, 'return_count': 100, 'platform_return_rate': 0.001,
                          'view_type': 'preview'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
    }

    # 地域分组小时级更新24h使用数据  loghubods.video_each_day_update_province_24h_total_apptype
    PROJECT_REGION_24H_APP_TYPE = 'loghubods'
    TABLE_REGION_24H_APP_TYPE = 'video_each_day_update_province_24h_total_apptype'

    # 地域分组小时级更新24h规则参数
    RULE_PARAMS_REGION_24H_APP_TYPE = {
        APP_TYPE['VLOG']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
                          'platform_return_rate': 0.001},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
                'data2': [APP_TYPE['VLOG'], APP_TYPE['LOVE_LIVE'], APP_TYPE['LONG_VIDEO'], APP_TYPE['SHORT_VIDEO']],
            }
        },
        APP_TYPE['LONG_VIDEO']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
                          'platform_return_rate': 0.001},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
                'data2': [APP_TYPE['LONG_VIDEO'], ],
                'data3': [APP_TYPE['VLOG'], APP_TYPE['LONG_VIDEO'], ],
                'data4': [APP_TYPE['VLOG'], APP_TYPE['LOVE_LIVE'], APP_TYPE['LONG_VIDEO'], APP_TYPE['SHORT_VIDEO']],
            }
        },
        APP_TYPE['LOVE_LIVE']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
                          'platform_return_rate': 0.001},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['SHORT_VIDEO']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
                          'platform_return_rate': 0.001},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['LAO_HAO_KAN_VIDEO']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
                          'platform_return_rate': 0.001},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['ZUI_JING_QI']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
                          'platform_return_rate': 0.001},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['APP']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'return_count': 21, 'score_rule': 0,
                          'platform_return_rate': 0.001},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
    }

    # 地域分组小时级规则更新使用数据
    PROJECT_REGION_APP_TYPE = 'loghubods'
    TABLE_REGION_APP_TYPE = 'video_each_hour_update_province_apptype'

    # 地域分组小时级规则参数
    RULE_PARAMS_REGION_APP_TYPE = {
        APP_TYPE['VLOG']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2'},
                'rule3': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                          'region_24h_rule_key': 'rule2'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
                'data2': [APP_TYPE['VLOG'], APP_TYPE['LOVE_LIVE'], APP_TYPE['LONG_VIDEO'], APP_TYPE['SHORT_VIDEO']],
            }
        },
        APP_TYPE['LONG_VIDEO']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2'},
                # 'rule3': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                #           'region_24h_rule_key': 'rule2'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
                'data2': [APP_TYPE['LONG_VIDEO'], ],
                'data3': [APP_TYPE['VLOG'], APP_TYPE['LONG_VIDEO'], ],
                'data4': [APP_TYPE['VLOG'], APP_TYPE['LOVE_LIVE'], APP_TYPE['LONG_VIDEO'], APP_TYPE['SHORT_VIDEO']],
            }
        },
        APP_TYPE['LOVE_LIVE']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2'},
                # 'rule3': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                #           'region_24h_rule_key': 'rule2'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['SHORT_VIDEO']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2'},
                # 'rule3': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                #           'region_24h_rule_key': 'rule2'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['LAO_HAO_KAN_VIDEO']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2'},
                # 'rule3': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                #           'region_24h_rule_key': 'rule2'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['ZUI_JING_QI']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2'},
                # 'rule3': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                #           'region_24h_rule_key': 'rule2'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
        APP_TYPE['APP']: {
            'rule_params': {
                'rule2': {'view_type': 'video-show', 'platform_return_rate': 0.001, 'region_24h_rule_key': 'rule2'},
                # 'rule3': {'view_type': 'video-show-region', 'platform_return_rate': 0.001,
                #           'region_24h_rule_key': 'rule2'},
            },
            'data_params': {
                'data1': [APP_TYPE['VLOG'], ],
            }
        },
    }

    # 老视频更新使用数据
    OLD_VIDEOS_PROJECT = 'loghubods'
    OLD_VIDEOS_TABLE = 'xcx_test_video'

    # 完整电影更新使用数据
    WHOLE_MOVIES_PROJECT = 'loghubods'
    WHOLE_MOVIES_TABLE = 'whole_movies'

    # 完整影视资源更新结果存放 redis key 前缀,完整格式:'com.weiqu.video.recall.whole.movies.item.{date}.{h}'
    RECALL_KEY_NAME_PREFIX_WHOLE_MOVIES = 'com.weiqu.video.recall.whole.movies.item.'

    # 小程序离线ROV模型结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.{date}
    RECALL_KEY_NAME_PREFIX = 'com.weiqu.video.recall.hot.item.score.'
    # 小程序小时级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.item.score.h.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_BY_H = 'com.weiqu.video.recall.item.score.h.'
    # 小程序相对24h数据更新结果与 小程序小时级更新结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.24h.h.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP_24H_H = 'com.weiqu.video.recall.hot.item.score.dup.24h.h.'
    # 小程序离线ROV模型结果与 小程序小时级更新结果/小程序相对24h数据更新结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.h.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP_H = 'com.weiqu.video.recall.hot.item.score.dup.h.'
    # 小时级视频状态不符合推荐要求的列表 redis key,完整格式:com.weiqu.video.filter.h.item.{rule_key}
    H_VIDEO_FILER = 'com.weiqu.video.filter.h.item.'

    # 小程序天级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.item.score.day.{rule_key}.{date}
    RECALL_KEY_NAME_PREFIX_BY_DAY = 'com.weiqu.video.recall.item.score.day.'
    # 小程序离线ROV模型结果与小程序天级更新结果去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.day.now.{rule_key}.{date}
    RECALL_KEY_NAME_PREFIX_DUP_DAY_NOW = 'com.weiqu.video.recall.hot.item.score.dup.day.now.'
    # 使用前一天小程序离线ROV模型结果与小程序天级更新结果去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.day.pre.{rule_key}.{date}
    RECALL_KEY_NAME_PREFIX_DUP_DAY_PRE = 'com.weiqu.video.recall.hot.item.score.dup.day.pre.'

    # 小程序小时级24h数据更新结果存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.item.score.apptype.24h.{appType}.{data_key}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_BY_24H = 'com.weiqu.video.recall.item.score.apptype.24h.'
    # 小程序离线ROV模型结果与小程序小时级24h更新结果去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.24h.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP_24H = 'com.weiqu.video.recall.hot.item.score.dup.24h.'
    # 小时级视频状态不符合推荐要求的列表 redis key,完整格式:com.weiqu.video.filter.apptype.h.item.24h.{appType}.{data_key}.{rule_key}
    H_VIDEO_FILER_24H = 'com.weiqu.video.filter.apptype.h.item.24h.'

    # 小程序地域分组小时级更新结果存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.item.score.apptype.region.h.{region}.{appType}.{data_key}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_REGION_BY_H = 'com.weiqu.video.recall.item.score.apptype.region.h.'
    # 小程序地域分组天级更新结果与小程序地域分组小时级更新结果去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup1.region.day.h.{region}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP1_REGION_DAY_H = 'com.weiqu.video.recall.hot.item.score.dup1.region.day.h.'
    # 小程序地域分组小时级更新24h结果与小程序地域分组小时级更新结果去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup1.apptype.region.24h.h.{region}.{appType}.{data_key}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H = 'com.weiqu.video.recall.hot.item.score.dup1.apptype.region.24h.h.'
    # 小程序天级更新结果与 小程序地域分组天级更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup2.region.day.h.{region}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP2_REGION_DAY_H = 'com.weiqu.video.recall.hot.item.score.dup2.region.day.h.'
    # 小程序24h更新结果与 小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup2.apptype.region.24h.h.{region}.{appType}.{data_key}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H = 'com.weiqu.video.recall.hot.item.score.dup2.apptype.region.24h.h.'
    # 小程序离线ROV模型结果与 小程序天级更新结果/小程序地域分组天级更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.apptype.region.h.{region}.{appType}.{data_key}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP_REGION_H = 'com.weiqu.video.recall.hot.item.score.dup.apptype.region.h.'
    # 地域分组小时级视频状态不符合推荐要求的列表 redis key,
    # 完整格式:com.weiqu.video.filter.apptype.region.h.item.{region}.{appType}.{data_key}.{rule_key}
    REGION_H_VIDEO_FILER = 'com.weiqu.video.filter.apptype.region.h.item.'
    # 小时级视频状态不符合推荐要求的列表 redis key,完整格式:com.weiqu.video.filter.h.item.24h.{region}.{rule_key}
    # H_VIDEO_FILER_24H = 'com.weiqu.video.filter.h.item.24h.'

    # 小程序地域分组天级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.item.score.region.day.{region}.{rule_key}.{date}
    RECALL_KEY_NAME_PREFIX_REGION_BY_DAY = 'com.weiqu.video.recall.item.score.region.day.'

    # 小程序地域分组小时级更新24h结果存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.item.score.apptype.region.24h.{region}.{appType}.{data_key}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_REGION_BY_24H = 'com.weiqu.video.recall.item.score.apptype.region.24h.'
    # 小程序天级更新结果与 小程序地域分组小时级更新24h结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.region.day.24h.{region}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP_REGION_DAY_24H = 'com.weiqu.video.recall.hot.item.score.dup.region.day.24h.'
    # 小程序离线ROV模型结果与 小程序天级更新结果/小程序地域分组小时级更新24h结果 去重后 存放 redis key前缀,
    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.region.24h.{region}.{rule_key}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_DUP_REGION_24H = 'com.weiqu.video.recall.hot.item.score.dup.region.24h.'
    # 地域分组小时级更新24h视频状态不符合推荐要求的列表 redis key,
    # 完整格式:com.weiqu.video.filter.apptype.region.h.item.24h.{region}.{appType}.{data_key}.{rule_key}
    REGION_H_VIDEO_FILER_24H = 'com.weiqu.video.filter.apptype.region.h.item.24h.'

    # 小程序老视频更新结果存放 redis key 前缀,完整格式:'com.weiqu.video.recall.old.item.{date}'
    RECALL_KEY_NAME_PREFIX_OLD_VIDEOS = 'com.weiqu.video.recall.old.item.'

    # app应用 小程序离线ROV模型结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.app.{date}
    RECALL_KEY_NAME_PREFIX_APP = 'com.weiqu.video.recall.hot.item.score.app.'
    # app应用 运营提供的小时级数据存放 redis key前缀,完整格式:com.weiqu.video.app.op.item.score.{date}.{h}
    APP_OP_VIDEOS_KEY_NAME_PREFIX = 'com.weiqu.video.app.op.item.score.'
    # app应用 小时级数据更新最终结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.app.{date}.{h}
    APP_FINAL_RECALL_KEY_NAME_PREFIX = 'com.weiqu.video.recall.hot.item.score.app.'

    # appType:[18, 19]小程序离线ROV模型结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.{appType}.{date}.{h}
    RECALL_KEY_NAME_PREFIX_APP_TYPE = 'com.weiqu.video.recall.hot.item.score.'

    # appType = 6, ROV召回池redis key前缀,完整格式:com.weiqu.video.recall.hot.apptype.h.item.score.{appType}.{h}
    # RECALL_KEY_NAME_PREFIX_APP_TYPE = 'com.weiqu.video.recall.hot.apptype.h.item.score.'

    # 流量池离线模型结果存放 redis key前缀,完整格式 com.weiqu.video.flowpool.hot.item.score.{appType}
    FLOWPOOL_KEY_NAME_PREFIX = 'com.weiqu.video.flowpool.hot.item.score.'
    # 快速曝光流量池数据存放 redis key前缀,完整格式 com.weiqu.video.quick.flowpool.hot.item.score.{appType}.{flowPool_id}
    QUICK_FLOWPOOL_KEY_NAME_PREFIX = 'com.weiqu.video.quick.flowpool.hot.item.score.'
    # 快速曝光流量池分发概率 redis key前缀,完整格式 com.weiqu.video.quick.flowpool.distribute_rate.{flowPool_id}
    QUICK_FLOWPOOL_DISTRIBUTE_RATE_KEY_NAME_PREFIX = 'com.weiqu.video.quick.flowpool.distribute_rate.'

    # 兜底视频redis存储key
    BOTTOM_KEY_NAME = 'com.weiqu.video.bottom'
    # 兜底视频数量
    BOTTOM_NUM = 1000
    # 首页兜底视频json存储 redis-key
    BOTTOM_JSON_KEY_NAME = 'com.weiqu.video.homepage.bottom.info.json.item'

    # 修改ROV的视频 redis key
    UPDATE_ROV_KEY_NAME = 'com.weiqu.video.update.rov.item.score'
    UPDATE_ROV_KEY_NAME_APP = 'com.weiqu.video.update.rov.item.score.app'

    # 生效中的置顶视频列表 redis key
    TOP_VIDEO_LIST_KEY_NAME = 'com.weiqu.video.top.item.score.area'
    TOP_VIDEO_LIST_KEY_NAME_APP = 'com.weiqu.video.top.item.score.area.app'

    # rovScore公差
    ROV_SCORE_D = 0.001

    # width : height > 1 的视频列表 redis key, zset存储,value为videoId,score为w_h_rate
    W_H_RATE_UP_1_VIDEO_LIST_KEY_NAME = {
        'rov_recall': 'com.weiqu.video.rov.w.h.rate.1.item',  # rov召回池视频
        'bottom_last': 'com.weiqu.video.bottom.last.w.h.rate.1.item'  # 二次兜底视频
    }

    # 头部视频对应运营强插的相关视频 redis 存储 key 前缀, 完整key格式:com.weiqu.video.relevant.videos.item.{videoId}
    RELEVANT_VIDEOS_WITH_OP_KEY_NAME = 'com.weiqu.video.relevant.videos.item.'
    # 有设置运营强插相关视频的头部视频id redis存储key
    RELEVANT_TOP_VIDEOS_KEY_NAME = 'com.weiqu.video.relevant.top.video_ids'

    # 按位置排序redis存储key
    RECALL_POSITION1_KEY_NAME = 'com.weiqu.video.recall.hot.apptype.h.item.score.position.1'
    RECALL_POSITION2_KEY_NAME = 'com.weiqu.video.recall.hot.apptype.h.item.score.position.2'

    SIM_N_19 = 4
    # 最惊奇电影类视频相关推荐列表存放 redis key前缀,完整格式: com.weiqu.movie.relevant.list.item.{videoId}
    MOVIE_RELEVANT_LIST_KEY_NAME_PREFIX = 'com.weiqu.movie.relevant.list.item.'

    # 特殊mid 及 指定视频 数据
    SPECIAL_MID_VIDEOS_PROJECT = {
        'mid': 'loghubods',
        'videos': 'loghubods'
    }
    SPECIAL_MID_VIDEOS_TABLE = {
        'mid': 'shielded_mid',
        'videos': 'shielded_video_list'
    }

    # 特殊mid更新结果存放 redis key ,完整格式:'com.weiqu.video.special.mid'
    KEY_NAME_SPECIAL_MID = 'com.weiqu.video.special.mid'
    # 特殊mid对应指定视频列表更新结果存放 redis key 前缀,完整格式:'com.weiqu.video.special.videos.item.{date}'
    KEY_NAME_PREFIX_SPECIAL_VIDEOS = 'com.weiqu.video.special.videos.item.'

    # 限流视频集合存放 redis key前缀,完整格式:'com.weiqu.video.limit.set.{date}'
    KEY_NAME_PREFIX_LIMIT_VIDEO_SET = 'com.weiqu.video.limit.set.'
    # 限流视频最大分发数记录 redis key,完整格式:'com.weiqu.video.limit.item'
    KEY_NAME_PREFIX_LIMIT_VIDEOS = 'com.weiqu.video.limit.item'
    # 限流视频分发数记录 redis key前缀,完整格式:'com.weiqu.video.limit.distribute.count.{videoId}'
    KEY_NAME_PREFIX_LIMIT_VIDEO_DISTRIBUTE_COUNT = 'com.weiqu.video.limit.distribute.count.'


class DevelopmentConfig(BaseConfig):
    """开发环境配置"""
    # 报警内容 环境区分
    ENV_TEXT = "开发环境"
    # 项目存放目录
    PROJECT_PATH = '/data2/rov-offline'

    # 测试环境redis地址
    REDIS_INFO = {
        'host': 'r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com',
        'port': 6379,
        'password': 'Wqsd@2019',
    }

    # Hologres连接参数,本地使用
    HOLOGRES_INFO = {
        'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou.hologres.aliyuncs.com',
        'port': 80,
        'dbname': 'dssm',
        'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
        'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
    }

    # 测试环境mysql地址
    MYSQL_INFO = {
        'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
        'port': 3306,
        'user': 'wx2016_longvideo',
        'password': 'wx2016_longvideoP@assword1234',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 测试环境 过滤用mysql地址
    FILTER_MYSQL_INFO = {
        'host': 'am-bp1g3ys9u00u483uc131930.ads.aliyuncs.com',
        'port': 3306,
        'user': 'lv_manager',
        'password': 'lv_manager@2020',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 日志服务配置
    ALIYUN_LOG = {
        'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
        'ACCESSID': 'LTAIWYUujJAm7CbH',
        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
        'PROJECT': 'rov-server-test',
    }

    # Hologres视频状态存储表名
    VIDEO_STATUS = 'longvideo_test.dwd_mdm_item_video_stat'

    # 快速曝光流量池ID
    QUICK_FLOW_POOL_ID = 3

    # 获取流量池分发配置接口地址
    GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getConfig'
    # 从流量池获取视频接口地址
    GET_VIDEOS_FROM_POOL_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/getAllVideo'
    # 获取视频在流量池中的剩余可分发数接口地址
    GET_REMAIN_VIEW_COUNT_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/remainViewCount'
    # 计算完ROV通知后端接口地址
    NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateRovScore'
    # 获取置顶视频列表接口地址
    TOP_VIDEO_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/topVideoList'
    # 获取首页兜底视频json接口地址
    BOTTOM_JSON_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/video/distribute/structure/video/list'
    # 通知后端更新兜底视频接口地址
    NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
    # 获取限流视频接口地址
    GET_VIDEO_LIMIT_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getVideoLimitList'

    # logs 上传oss 目标Bucket指定目录
    OSS_FOLDER_LOGS = 'rov-offline/dev/logs/'
    # data 上传oss 目标Bucket指定目录
    OSS_FOLDER_DATA = 'rov-offline/dev/data/'


class TestConfig(BaseConfig):
    """测试环境配置"""
    # 报警内容 环境区分
    ENV_TEXT = "测试环境"
    # 项目存放目录
    PROJECT_PATH = '/data2/rov-offline'

    # 测试环境redis地址
    REDIS_INFO = {
        'host': 'r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com',
        'port': 6379,
        'password': 'Wqsd@2019',
    }

    # Hologres连接参数,服务器使用
    HOLOGRES_INFO = {
        'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com',
        'port': 80,
        'dbname': 'dssm',
        'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
        'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
    }

    # 测试环境mysql地址
    MYSQL_INFO = {
        'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
        'port': 3306,
        'user': 'wx2016_longvideo',
        'password': 'wx2016_longvideoP@assword1234',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 测试环境 过滤用mysql地址
    FILTER_MYSQL_INFO = {
        'host': 'am-bp1g3ys9u00u483uc131930.ads.aliyuncs.com',
        'port': 3306,
        'user': 'lv_manager',
        'password': 'lv_manager@2020',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 日志服务配置
    ALIYUN_LOG = {
        'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
        'ACCESSID': 'LTAIWYUujJAm7CbH',
        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
        'PROJECT': 'rov-server-test',
    }

    # Hologres视频状态存储表名
    VIDEO_STATUS = 'longvideo_test.dwd_mdm_item_video_stat'

    # 快速曝光流量池ID
    QUICK_FLOW_POOL_ID = 3

    # 获取流量池分发配置接口地址
    GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getConfig'
    # 从流量池获取视频接口地址
    GET_VIDEOS_FROM_POOL_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/getAllVideo'
    # 获取视频在流量池中的剩余可分发数接口地址
    GET_REMAIN_VIEW_COUNT_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/remainViewCount'
    # 计算完ROV通知后端接口地址
    NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateRovScore'
    # 获取置顶视频列表接口地址
    TOP_VIDEO_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/topVideoList'
    # 获取首页兜底视频json接口地址
    BOTTOM_JSON_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/video/distribute/structure/video/list'
    # 通知后端更新兜底视频接口地址
    NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
    # 获取限流视频接口地址
    GET_VIDEO_LIMIT_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/getVideoLimitList'

    # logs 上传oss 目标Bucket指定目录
    OSS_FOLDER_LOGS = 'rov-offline/test/logs/'
    # data 上传oss 目标Bucket指定目录
    OSS_FOLDER_DATA = 'rov-offline/test/data/'


class PreProductionConfig(BaseConfig):
    """预发布环境配置"""
    # 报警内容 环境区分
    ENV_TEXT = "预发布环境"
    # 项目存放目录
    PROJECT_PATH = '/data/rov-offline'

    # redis地址
    REDIS_INFO = {
        'host': 'r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com',
        'port': 6379,
        'password': 'Wqsd@2019',
    }

    # Hologres连接参数,服务器使用
    HOLOGRES_INFO = {
        'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com',
        'port': 80,
        'dbname': 'dssm',
        'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
        'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
    }

    # 生产环境mysql地址
    MYSQL_INFO = {
        'host': 'rr-bp1x9785e8h5452bi157.mysql.rds.aliyuncs.com',
        'port': 3306,
        'user': 'wx2016_longvideo',
        'password': 'wx2016_longvideoP@assword1234',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 生产环境 过滤用mysql地址
    FILTER_MYSQL_INFO = {
        'host': 'am-bp15tqt957i3b3sgi131950.ads.aliyuncs.com',
        'port': 3306,
        'user': 'lv_manager',
        'password': 'lv_manager@2020',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 日志服务配置
    ALIYUN_LOG = {
        'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
        'ACCESSID': 'LTAIWYUujJAm7CbH',
        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
        'PROJECT': 'rov-server',
    }

    # Hologres视频状态存储表名
    VIDEO_STATUS = 'longvideo.dwd_mdm_item_video_stat'

    # 快速曝光流量池ID
    QUICK_FLOW_POOL_ID = 3

    # 获取流量池分发配置接口地址
    GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://prespeed-internal.piaoquantv.com/longvideoapi/openapi/recommend/getConfig'
    # 从流量池获取视频接口地址
    GET_VIDEOS_FROM_POOL_URL = 'http://preapi-internal.piaoquantv.com/flowpool/video/getAllVideo'
    # 获取视频在流量池中的剩余可分发数接口地址
    GET_REMAIN_VIEW_COUNT_URL = 'http://preapi-internal.piaoquantv.com/flowpool/video/remainViewCount'
    # 计算完ROV通知后端接口地址
    NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videopre-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateRovScore'
    # 获取置顶视频列表接口地址
    TOP_VIDEO_LIST_URL = 'http://speedpre.wx.com/longvideoapi/openapi/recommend/topVideoList'
    # 获取首页兜底视频json接口地址
    BOTTOM_JSON_URL = 'http://speedpre.wx.com/longvideoapi/openapi/video/distribute/structure/video/list'
    # 通知后端更新兜底视频接口地址
    NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://videopre-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
    # 获取限流视频接口地址
    GET_VIDEO_LIMIT_LIST_URL = 'http://prespeed-internal.piaoquantv.com/longvideoapi/openapi/recommend/getVideoLimitList'

    # logs 上传oss 目标Bucket指定目录
    OSS_FOLDER_LOGS = 'rov-offline/pre/logs/'
    # data 上传oss 目标Bucket指定目录
    OSS_FOLDER_DATA = 'rov-offline/pre/data/'


class ProductionConfig(BaseConfig):
    """生产环境配置"""
    # 报警内容 环境区分
    ENV_TEXT = "生产环境"
    # 项目存放目录
    PROJECT_PATH = '/data/rov-offline'

    # 线上环境redis地址
    REDIS_INFO = {
        'host': 'r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com',
        'port': 6379,
        'password': 'Wqsd@2019',
    }

    # Hologres连接参数,服务器使用
    HOLOGRES_INFO = {
        'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com',
        'port': 80,
        'dbname': 'dssm',
        'user': 'LTAI5tMPqPy9yboQAf1mBCCN',
        'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj'
    }

    # 生产环境mysql地址
    MYSQL_INFO = {
        'host': 'rr-bp1x9785e8h5452bi157.mysql.rds.aliyuncs.com',
        'port': 3306,
        'user': 'wx2016_longvideo',
        'password': 'wx2016_longvideoP@assword1234',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 生产环境 过滤用mysql地址
    FILTER_MYSQL_INFO = {
        'host': 'am-bp15tqt957i3b3sgi131950.ads.aliyuncs.com',
        'port': 3306,
        'user': 'lv_manager',
        'password': 'lv_manager@2020',
        'db': 'longvideo',
        'charset': 'utf8'
    }

    # 日志服务配置
    ALIYUN_LOG = {
        'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
        'ACCESSID': 'LTAIWYUujJAm7CbH',
        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
        'PROJECT': 'rov-server',
    }

    # Hologres视频状态存储表名
    VIDEO_STATUS = 'longvideo.dwd_mdm_item_video_stat'

    # 快速曝光流量池ID
    QUICK_FLOW_POOL_ID = 3

    # 获取流量池分发配置接口地址
    GET_FLOW_POOL_RECOMMEND_CONFIG_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/getConfig'
    # 从流量池获取视频接口地址
    GET_VIDEOS_FROM_POOL_URL = 'http://api-internal.piaoquantv.com/flowpool/video/getAllVideo'
    # 获取视频在流量池中的剩余可分发数接口地址
    GET_REMAIN_VIEW_COUNT_URL = 'http://api-internal.piaoquantv.com/flowpool/video/remainViewCount'
    # 计算完ROV通知后端接口地址
    NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateRovScore'
    # 获取置顶视频列表接口地址
    TOP_VIDEO_LIST_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/topVideoList'
    # 获取首页兜底视频json接口地址
    BOTTOM_JSON_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/video/distribute/structure/video/list'
    # 通知后端更新兜底视频接口地址
    NOTIFY_BACKEND_updateFallBackVideoList_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateFallBackVideoList'
    # 获取限流视频接口地址
    GET_VIDEO_LIMIT_LIST_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/getVideoLimitList'

    # logs 上传oss 目标Bucket指定目录
    OSS_FOLDER_LOGS = 'rov-offline/pro/logs/'
    # data 上传oss 目标Bucket指定目录
    OSS_FOLDER_DATA = 'rov-offline/pro/data/'


def set_config():
    # 获取环境变量 ROV_OFFLINE_ENV
    env = os.environ.get('ROV_OFFLINE_ENV')
    # env = 'dev'
    if env is None:
        # log_.error('ENV ERROR: is None!')
        return
    if env == 'dev':
        return DevelopmentConfig(), env
    elif env == 'test':
        return TestConfig(), env
    elif env == 'pre':
        return PreProductionConfig(), env
    elif env == 'pro':
        return ProductionConfig(), env
    else:
        # log_.error('ENV ERROR: is {}'.format(env))
        return