"""修复区县组 + 列出所有剩余未分类条目"""
import json, os

CONFIG_PATH = "/root/gov_crawler/daily_crawl_config.json"
BACKUP_DIR = "/root/gov_crawler/backups"

CNTY_TO_PROV = {
    "准格尔旗":"内蒙古","乌拉特前旗":"内蒙古","乌拉特后旗":"内蒙古","满州里市":"内蒙古",
    "满州里":"内蒙古","呼和浩特市":"内蒙古","乌海市":"内蒙古","乌达区":"内蒙古",
    "武川县":"内蒙古","托克托县":"内蒙古","九原区":"内蒙古","科尔沁区":"内蒙古",
    "额济纳旗":"内蒙古","阿拉善":"内蒙古","高昌区":"新疆","新星市":"新疆",
    "双河市":"新疆","石河子市":"新疆","新和县":"新疆","阿克苏":"新疆",
    "永平县":"云南","祥云县":"云南","丽江":"云南","古城区":"云南","文山州":"云南",
    "南华县":"云南","沾益区":"云南","沾益":"云南","富源县":"云南",
    "勐海县":"云南","澜沧县":"云南",
    "涪城区":"四川","犍为县":"四川","罗江区":"四川","旌阳区":"四川",
    "米易县":"四川","大安区":"四川","沿滩区":"四川","仪陇县":"四川",
    "乐山市":"四川","五通桥区":"四川","广安市":"四川","广安":"四川",
    "宜宾市":"四川","宜宾":"四川","绵阳":"四川","德阳市":"四川","德阳":"四川",
    "泸州市":"四川","眉山市":"四川","稷山县":"山西","绛县":"山西","夏县":"山西",
    "闻喜县":"山西","永济市":"山西","河津市":"山西","万荣县":"山西",
    "新绛县":"山西","临猗县":"山西","垣曲县":"山西","平陆县":"山西",
    "芮城县":"山西","清徐县":"山西","榆社县":"山西","忻州市":"山西",
    "原平市":"山西","朔州市":"山西","湘潭县":"湖南","湘乡市":"湖南",
    "湘阴县":"湖南","沅江市":"湖南","绥宁县":"湖南","新化县":"湖南",
    "习水县":"贵州","思南县":"贵州","纳雍县":"贵州","息烽县":"贵州",
    "开阳县":"贵州","黔东南":"贵州","黔南":"贵州","麻江县":"贵州",
    "湄潭县":"贵州","福泉市":"贵州","铜仁市":"贵州","赣州市":"江西",
    "赣县区":"江西","章贡区":"江西","余江区":"江西","月湖区":"江西",
    "永修县":"江西","彭泽县":"江西","丰城市":"江西","袁州区":"江西",
    "青原区":"江西","掇刀区":"湖北","黄冈市":"湖北","大悟县":"湖北",
    "潜江市":"湖北","仙桃市":"湖北","天门市":"湖北","嘉鱼县":"湖北",
    "赤壁市":"湖北","通城县":"湖北","阳新县":"湖北","公安县":"湖北",
    "石首市":"湖北","云梦县":"湖北","洪湖市":"湖北","禹王台区":"河南",
    "潢川县":"河南","濮阳县":"河南","方城县":"河南","商水县":"河南",
    "新乡市":"河南","许昌市":"河南","建安区":"河南","榆林市":"陕西",
    "志丹县":"陕西","黄陵县":"陕西","渭南市":"陕西","河间市":"河北",
    "任丘市":"河北","金昌市":"甘肃","永昌县":"甘肃","宕昌县":"甘肃",
    "白银市":"甘肃","融水":"广西","兴宾区":"广西","营口市":"辽宁",
    "大石桥市":"辽宁","阜新市":"辽宁","细河区":"辽宁","本溪市":"辽宁",
    "明山区":"辽宁","凌海市":"辽宁","爱辉区":"黑龙江","牡丹江市":"黑龙江",
    "惠农区":"宁夏","平罗县":"宁夏","沙坡头区":"宁夏",
    "福州市":"福建","泉州市":"福建","晋江市":"福建","漳州市":"福建",
    "江门市":"广东","新会区":"广东","鹤山市":"广东","湛江市":"广东",
    "廉江市":"广东","茂名市":"广东","英德市":"广东","惠城区":"广东",
    "清城区":"广东","梅州市":"广东","梅县区":"广东","顺德区":"广东",
    "昆山市":"江苏","宜兴市":"江苏","江阴市":"江苏","张家港":"江苏",
    "仪征市":"江苏","宿豫区":"江苏","海安市":"江苏","如皋市":"江苏",
    "溧阳市":"江苏","赣榆区":"江苏",
    "寿光市":"山东","邹城市":"山东","烟台市":"山东","龙口市":"山东",
    "滕州市":"山东","无棣县":"山东","阳信县":"山东","高唐县":"山东",
    "茌平区":"山东","费县":"山东","平邑县":"山东","沂水县":"山东",
    "蓬莱区":"山东","峄城区":"山东","上虞区":"浙江","德清县":"浙江",
    "长兴县":"浙江","安吉县":"浙江","义乌市":"浙江","黄岩区":"浙江",
    "遂昌县":"浙江",
    "来安县":"安徽","全椒县":"安徽","南谯区":"安徽","南陵县":"安徽",
    "怀宁县":"安徽","颍上县":"安徽","临泉县":"安徽","当涂县":"安徽",
    "含山县":"安徽","贵池区":"安徽","东至县":"安徽","郎溪县":"安徽",
    "广德市":"安徽","宁国市":"安徽","旌德县":"安徽","埇桥区":"安徽",
    "砀山县":"安徽","谯城区":"安徽","利辛县":"安徽","霍邱县":"安徽",
    "舒城县":"安徽","宣州区":"安徽","宜秀区":"安徽","大观区":"安徽",
    "迎江区":"安徽","铜陵市":"安徽","阜阳市":"安徽","滁州市":"安徽",
    "黄山市":"安徽","马鞍山":"安徽","涪陵区":"重庆","綦江区":"重庆",
    "长寿区":"重庆","儋州市":"海南",
}

def load_config():
    with open(CONFIG_PATH) as f:
        cfg = json.load(f)
    return cfg if isinstance(cfg, list) else cfg.get("crawlers", cfg)

def save_config(config, path=None):
    path = path or CONFIG_PATH
    with open(path, "w") as f:
        json.dump(config, f, ensure_ascii=False, indent=2)

def backup():
    from datetime import datetime
    os.makedirs(BACKUP_DIR, exist_ok=True)
    ts = datetime.now().strftime("%Y%m%d_%H%M%S")
    bp = os.path.join(BACKUP_DIR, f"config_v5_{ts}.json")
    save_config(load_config(), bp)
    return bp

# Step 1: Reclassify 区县
cfg = load_config()
backup_path = backup()

all_provinces = ["安徽","江西","江苏","山东","广东","河南","内蒙古","新疆","四川",
                "湖北","湖南","浙江","山西","贵州","辽宁","甘肃","福建","云南",
                "广西","河北","黑龙江","陕西","宁夏","重庆","青海","天津","吉林",
                "上海","北京","西藏","海南"]

changes = []
for item in cfg:
    g = item.get("group", "")
    if g not in ("区县",):
        continue
    
    name = item.get("name", "") or ""
    if not name:
        continue
    
    new_group = None
    for p in all_provinces:
        if p in name:
            new_group = p
            break
    if not new_group:
        for cnty, prov in sorted(CNTY_TO_PROV.items(), key=lambda x: -len(x[0])):
            if cnty in name:
                new_group = prov
                break
    if not new_group:
        for kw in ["公司","集团","石化","制药","药业","化工","能源","钢铁","矿业","新材料","环保科技"]:
            if kw in name:
                new_group = "企业"
                break
    
    if new_group and new_group != g:
        changes.append((name, g, new_group))
        item["group"] = new_group

save_config(cfg)
print(f"区县组重新分类 {len(changes)} 条\n")
summary = {}
for name, old, new_g in changes:
    key = f"{old} → {new_g}"
    summary.setdefault(key, []).append(name)
for key in sorted(summary.keys(), key=lambda k: -len(summary[k])):
    print(f"  {key} ({len(summary[key])}条)")

print(f"\n\n已备份到: {backup_path}")
print(f"备份文件名: config_v5_*.json")
