import json, re, os

# 拼音/缩写 → 中文站点名 映射表
# 覆盖所有县级以上地名，以及常见企业缩写
PINYIN_TO_CN = {
    # 常用拼音缩写 → 实际站点名
    "zibo": "淄博市",
    "yayc": "雅安市",
    "nf": "南方",
    "lsz": "六盘水市",
    "gcq": "高昌区",
    "sxx": "绥宁县",
    "zgyt": "中国盐田",
    "wfhb": "潍坊环保",
    "zz_hb": "郑州环保",
    "gzxxw": "贵州信息网",
    "ksgsgg": "昆山市公示公告",
    "btnsss": "北屯市",
    "pengxi": "蓬溪县",
    "haihua": "海化集团",
    "sdcoke": "山东焦化",
    "tl_env": "铜陵环境",
    "sthj_fy": "阜阳市生态环境",
    "capchem": "新宙邦（Capchem）",
    "mz_gsgg": "梅州市公示公告",
    "xsx_sthj": "习水县生态环境",
    "xtx_hjbh": "湘潭县环境保护",
    "qdn_slgs": "黔东南水利公司",
    "nlx_xzsp": "南陵县行政许可",
    "dancheng": "郸城县",
    "jincheng": "晋城市",
    "zoucheng": "邹城市",
    "neijiang": "内江市",
    "shucheng": "舒城县",
    "shuozhou": "朔州市",
    "sxakhidz": "陕西安康恒口示范区",
    "cnjf_env": "中金环境",
    "thx_tzgg": "太湖县通知公告",
    "tmg_yjzj": "天门市应急减灾",
    "zjg_tzgg": "张家港市通知公告",
    "gaxq_xqwj": "广安高新区项目文件",
    "gaxq_xmhp": "广安高新区项目环保",
    "jxnf_hjbh": "江西南方环保",
    "gzza_tzgg": "赣州章贡区通知公告",
    "ahhy_hpsp": "安徽淮源环保审批",
    "ynck_tzgg": "云南楚雄通知公告",
    "wsxw_tzgg": "温水县通知公告",
    "fxxh_bmtz": "费县信息公开",
    "jinan_hbj": "济南市环保局",
    "huangling": "黄陵县",
    "qjfy_hpgl": "曲靖市环评管理",
    "byeb_sthj": "巴音尔堡生态环境",
    "qianjiang": "潜江市",
    "shouguang": "寿光市",
    "shengquan": "圣泉集团",
    "yncn_tzgg": "云南楚雄南华通知公告",
    "ynws_gsgg": "云南文山公示公告",
    "ysia_zdxm": "榆林市重大项目",
    "dyedz_hpsp": "东营经济开发区环评审批",
    "yiyang_shj": "益阳市生态环境",
    "lc_sthj_v2": "聊城市生态环境",
    "hb_lh_tzgg": "淮北市通知公告",
    "nanpu_gsgg": "南浦公示公告",
    "xinyu_zwgg": "新余市政务公告",
    "kpstz_gkml": "昆明盘龙区公开目录",
    "dyq_notice": "大庆区通知",
    "dypedz_env": "大庆石油经济开发区环境",
    "sntyq_tzgg": "沈抚新区通知公告",
    "xjshs_zbgg": "新疆石河子招标公告",
    "yantai_hbj": "烟台市环保局",
    "yuehu_gggs": "岳麓区公示公告",
    "zetdz_yjzj": "淄博经济开发区应急减灾",
    "yixiu_hjxp": "宜秀区环评审批",
    "aqdgq_hjxp": "安庆大观区环评审批",
    "nayong_tzgg": "纳雍县通知公告",
    "duodao_tzgg": "掇刀区通知公告",
    "gucheng_hbj": "古城区环保局",
    "yingkou_xrd": "营口市",
    "hejian_zjdc": "河间市",
    "aq_gxq_qyhb": "安庆高新区企业环保",
    "btnsss_gsgg": "北屯市公示公告",
    "ganzhou_spj": "赣州市审批局",
    "yantai_tzgg": "烟台市通知公告",
    "tchbgz_hpgs": "天常环保环评公示",
    "xuyong_gsgg": "叙永县公示公告",
    "yanjin_gsgg": "盐津县公示公告",
    "yanzhou_eia": "兖州区环评",
    "yishui_gggs": "沂水县公示公告",
    "yixing_gggs": "宜兴市公示公告",
    "yushui_zwgg": "玉树市政务公告",
    "xuchang_hjbh": "许昌市环境保护",
    "jiayu_xxgknb": "嘉鱼县信息公开年报",
    "keerqin_sthj": "科尔沁区生态环境",
    "penglai_hjxp": "蓬莱区环评审批",
    "qingdao_mbee": "青岛海湾集团",
    "hn_sthj_hpgs": "淮南市生态环境环评公示",
    "jkq_mas_tzgg": "马鞍山经开区通知公告",
    "chq_mas_tzgg": "马鞍山慈湖区通知公告",
    "weiyuan_gsgg": "威远县公示公告",
    "yujiang_xzxk": "余江区行政许可",
    "xjxinhe_gsgg": "新疆新和县公示公告",
    "zzszq_sthjfj": "枣庄市中区生态环境分局",
    "wuda_cshssqk": "乌达区城市环境",
    "xjxinhe_hjbh": "新疆新和县环境保护",
    "ynsthjt_npzx": "云南省生态环境厅南盘中心",
    "yongxin_gggs": "永新县公示公告",
    "yueyang_sthj": "岳阳市生态环境",
    "zhoushan_hbj": "舟山市环保局",
    "penglai_tzgg": "蓬莱区通知公告",
    "shangyu_sthj": "上虞区生态环境",
    "zhengrun_xmgs": "镇江润州区项目公示",
    "gzhb_jsxmslgs": "广州环保建设项目受理公示",
    "jinan_epb_new": "济南市环保局（新站）",
    "ganxian_hbgss": "赣县区环保公示",
    "tanchang_tzgg": "宕昌县通知公告",
    "yiyuan_notice": "沂源县通知",
    "zdhjkj_notice": "中电环境科技通知",
    "zhaoxian_gsgg": "赵县公示公告",
    "zoucheng_tpzb": "邹城市招标投标",
    "jkq_my_gongshi": "绵阳经开区公示",
    "gdnx_sthjj_eia": "广东南雄生态环境局环评",
    "ljgucheng_zdxm": "丽江古城区重点项目",
    "jinan_epb_yppz": "济南市环保局药品批复",
    "yizheng_hxgyyq": "仪征市化学工业园区",
    "ljgucheng_hjbh": "丽江古城区环境保护",
    "yanshougs_sbys": "延寿县设备验收",
    "guangde_hjxxgk": "广德市环境信息公开",
    "szsnews_notice": "苏州市新闻通知",
    "ynfushi_notice": "云南富施县通知",
    "tzwnantong_tzgg": "南通市通知公告",
    "tzwnantong_hpgs": "南通市环评公示",
    "puyangxian_hjbh": "濮阳县环境保护",
    "yixing_yxz_gggs": "宜兴市杨巷镇公示公告",
    "zgpingyuan_tzgg": "中广平原通知公告",
    "ningguo_tzgg": "宁国市通知公告",
    "xinxiang_xzxk_xq": "新乡市行政许可详情",
    "zhoushan_gxq_tzgg": "舟山市高新区通知",
    "aax_tzgg": "爱辉区通知公告",
    "suyu_hpgs": "宿豫区环评公示",
    "jxnf": "江西南方",
    "ynck": "云南楚雄",
    "ss_gonggao": "石首市公告",
    "hb": "淮北",
    "ahqy": "安徽区域",
    "jxnc": "江西南昌",
    "yongchang": "永昌县",
    "yilong": "仪陇县",
    "jiangyou": "江油市",
    "jinjiang": "晋江市",
    "heshan": "鹤山市",
    "lndbss": "辽宁丹东市",
    "changtu": "昌图县",
    "kaiyang": "开阳县",
    "baotou": "包头市",
    "zgq": "章贡区",
    "zgwn": "章贡区",
    "zgys": "章贡区",
    "zjlg": "浙江龙港",
    "zjna": "浙江南澳",
    "zxbq": "志丹县",
    "zgq": "章贡区",
    "mmht": "茂名市",
    "jxyf": "江苏宜兴",
    "bayan": "巴彦县",
    "jtxzf": "金塔县政府",
    "zhangye": "张掖市",
    "suichang": "遂昌县",
    "yongxiu": "永修县",
    "mengjin": "孟津区",
    "jiaoling": "蕉岭县",
    "xiushui": "修水县",
    "jingmen_jtysj": "荆门市交通局",
    "kaifeng": "开封市",
    "dawu": "大悟县",
    "yyx": "炎陵县/益阳县",
    "jy": "（脚本名过长时）",
    "jiangyou": "江油市",
    "yanh": "山西运城石化",
}

# Gov.cn域名 → 站点名映射
GOV_DOMAIN_MAP = {
    "mmht.gov.cn": "茂名华泰",
    "ahqy.gov.cn": "安徽区域",
    "jxnc.gov.cn": "南昌市",
    "zhangzhou.gov.cn": "漳州市",
    "yw.gov.cn": "义乌市",
    "jxyf.gov.cn": "宜兴市",
    "bayan.gov.cn": "巴彦县",
    "jtxzf.gov.cn": "金塔县",
    "heshan.gov.cn": "鹤山市",
    "lndbss.gov.cn": "丹东市",
    "yilong.gov.cn": "仪陇县",
    "zp.gov.cn": "章丘市",
    "changtu.gov.cn": "昌图县",
    "kaiyang.gov.cn": "开阳县",
    "baotou.gov.cn": "包头市",
    "zgq.gov.cn": "章贡区",
    "zgwn.gov.cn": "章贡区",
    "zgys.gov.cn": "章贡区",
    "zjlg.gov.cn": "龙港市",
    "zjna.gov.cn": "南安市",
    "zxbq.gov.cn": "志丹县",
    "yongchang.gov.cn": "永昌县",
    "wanzai.gov.cn": "万载县",
    "yyx.gov.cn": "炎陵县",
    "hbdawu.gov.cn": "大悟县",
    "xiushui.gov.cn": "修水县",
    "jingmen.gov.cn": "荆门市",
    "sthjj.baotou.gov.cn": "包头市生态环境局",
    "sthjj.kaifeng.gov.cn": "开封市生态环境局",
    "yongxiu.gov.cn": "永修县",
    "mengjin.gov.cn": "孟津县",
    "jiaoling.gov.cn": "蕉岭县",
    "jinjiang.gov.cn": "晋江市",
    "zhangye.gov.cn": "张掖市",
    "suichang.gov.cn": "遂昌县",
    "jtysj.jingmen.gov.cn": "荆门市交通局",
    "yanh.sxycpc.com": "山西运城石化",
    "spchemicals.com.cn": "SP化工",
    "www.zhcqhj.com": "中环清新环保",
    "hbj.hbdawu.gov.cn": "大悟县",
    "www.zgq.gov.cn": "章贡区",
    "www.zgwn.gov.cn": "章贡区",
    "www.zgys.gov.cn": "章贡区",
    "www.zjlg.gov.cn": "龙港市",
    "www.zjna.gov.cn": "南安市",
    "www.zxbq.gov.cn": "志丹县",
    "www.zp.gov.cn": "章丘市",
    "www.zhangye.gov.cn": "张掖市",
}

# 特殊名称直接覆盖
SPECIAL_NAME_OVERRIDE = {
    "www.zhcqhj.com-gsl": "中环清新环保-公示栏",
    "sthjj.baotou.gov.cn": "包头市生态环境局",
}


def load_config():
    with open("/root/gov_crawler/daily_crawl_config.json") as f:
        cfg = json.load(f)
    return cfg if isinstance(cfg, list) else cfg.get('crawlers', cfg)


def save_config(config):
    with open("/root/gov_crawler/daily_crawl_config.json", 'w') as f:
        json.dump(config, f, ensure_ascii=False, indent=2)


def fix_name(name, script):
    """修复名称列"""
    if not name:
        return name
    
    original = name
    new_name = name
    
    # 0. 特殊名称覆盖
    if new_name in SPECIAL_NAME_OVERRIDE:
        new_name = SPECIAL_NAME_OVERRIDE[new_name]
    
    # 1. 域名前缀 → 中文站点名
    # 匹配 pattern: xxx.gov.cn-YYYY 或 www.xxx.gov.cn-YYYY
    # 支持多级子域名: sthjj.baotou.gov.cn, hbj.hbdawu.gov.cn
    m = re.match(r'^(www\.)?([a-z0-9]+(\.[a-z0-9]+)*\.(gov\.cn|com\.cn|com))[-—]?(.*)$', new_name, re.I)
    if m:
        full_domain = (m.group(1) or '') + m.group(2)
        suffix = m.group(5) or ''
        if full_domain in GOV_DOMAIN_MAP:
            base = GOV_DOMAIN_MAP[full_domain]
            new_name = f"{base}-{suffix}" if suffix else base
        elif m.group(2).endswith('.gov.cn'):
            # 尝试从域名提取
            base = m.group(2).replace('.gov.cn', '').replace('sthjj.', '')
            # 去掉 www. 前缀
            base = base.replace('www.', '')
            parts = base.split('.')
            if len(parts) >= 2:
                # 有可能是像 hbdawu 这样的三级域名
                for p in parts:
                    if p in PINYIN_TO_CN:
                        base = PINYIN_TO_CN[p]
                        break
                else:
                    base = parts[-1] if len(parts) <= 2 else parts[-2]
            if base not in PINYIN_TO_CN:
                # 尝试拼音转中文
                pass
            new_name = f"{base}-{suffix}" if suffix else base
    
    # 2. 纯英文/拼音拼音 → 中文
    if not any('\u4e00' <= c <= '\u9fff' for c in new_name):
        # 从脚本名提取 key
        script_key = script.replace('.py', '').replace('crawl_', '')
        if script_key in PINYIN_TO_CN:
            new_name = PINYIN_TO_CN[script_key]
        elif new_name in PINYIN_TO_CN:
            new_name = PINYIN_TO_CN[new_name]
    
    # 3. 清理 [orphan] 后缀
    new_name = re.sub(r'\s*\[orphan\]\s*$', '', new_name)
    
    return new_name if new_name != original else original


def main():
    cfg = load_config()
    changes = []
    
    for i, item in enumerate(cfg):
        old_name = item.get("name", "") or ""
        script = item.get("script", "") or ""
        
        new_name = fix_name(old_name, script)
        
        if new_name and new_name != old_name:
            changes.append((i, old_name, new_name, item.get("group", "") or ""))
    
    if not changes:
        print("✅ 无需修改")
        return
    
    print(f"共检测到 {len(changes)} 条名称需要修改\n")
    print(f"{'Idx':>4} {'旧名称':<35} {'→ 新名称':<35} {'分组':<12}")
    print("=" * 90)
    for idx, (i, old_n, new_n, group) in enumerate(changes):
        old_disp = (old_n[:34] + '…') if len(old_n) > 35 else old_n
        new_disp = (new_n[:34] + '…') if len(new_n) > 35 else new_n
        print(f"{i:>4} {old_disp:<35} → {new_disp:<35} {group:<12}")
    
    print(f"\n修改 {len(changes)} 条，是否应用? (yes/no): ", end="")
    confirm = input().strip().lower()
    if confirm in ('yes', 'y', '是'):
        for i, old_n, new_n, _ in changes:
            cfg[i]["name"] = new_n
        save_config(cfg)
        print(f"✅ 已保存 {len(changes)} 条名称修改")
    else:
        print("❌ 已取消")


if __name__ == '__main__':
    main()
