import datetime
from config import set_config
from utils import RedisHelper, send_msg_to_feishu
from log import Log

config_, _ = set_config()
log_ = Log()
redis_helper = RedisHelper()

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'
}


def get_redis_data_keys(now_date, now_h):
    # 检查所需列表是否已更新好
    redis_data_keys = []
    # rov模型预测列表
    if now_h > 6:
        rov_key_name = f"{config_.RECALL_KEY_NAME_PREFIX}{now_date}"
        redis_data_keys.append(rov_key_name)
    # 地域分组小时级列表
    rule_params = config_.RULE_PARAMS_REGION
    key_prefix_list = [
        config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H,
        config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H,
        config_.RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H,
        config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H
    ]
    region_code_list = [code for region, code in region_code.items()]
    for rule_key, _ in rule_params.items():
        for region in region_code_list:
            if region == '-1':
                region_key_name = [f"{key_prefix_list[-1]}{region}.{rule_key}.{now_date}.{now_h}"]
            else:
                region_key_name = [f"{key_prefix}{region}.{rule_key}.{now_date}.{now_h}"
                                   for key_prefix in key_prefix_list]
            redis_data_keys.extend(region_key_name)

    return redis_data_keys


def monitor(now_date, now_h):
    redis_data_keys = get_redis_data_keys(now_date=now_date, now_h=now_h)
    log_.info(f"redis_data_keys = {redis_data_keys}")
    for key_name in redis_data_keys:
        if not redis_helper.key_exists(key_name=key_name):
            msg_text = f"{config_.ENV_TEXT} —— now_date = {now_date}, now_h = {now_h}, key = {key_name}, " \
                       f"数据未按时更新,请及时查看解决。"
            log_.info(f"msg_text = {msg_text}")
            send_msg_to_feishu(
                webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
                key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
                msg_text=msg_text
            )


if __name__ == '__main__':
    now_date = datetime.datetime.today().strftime('%Y%m%d')
    now_h = datetime.datetime.now().hour
    log_.info(f"now_date = {now_date}, now_h = {now_h}")
    monitor(now_date=now_date, now_h=now_h)
    log_.info("end!")