#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Curate the final project list by matching title fragments against raw scraped records.
Every URL comes verbatim from the raw scrape (never constructed)."""
import json, io, os

BASE = "/data/www/files"

GZ = json.load(io.open(os.path.join(BASE, "ggzy_raw_0925.json"), encoding="utf-8"))["records"]
GS = json.load(io.open(os.path.join(BASE, "gansu_raw_0925.json"), encoding="utf-8"))
CQ = json.load(io.open(os.path.join(BASE, "cq_cd_20260925.json"), encoding="utf-8"))
SC = json.load(io.open(os.path.join(BASE, "sc_gov_20260925.json"), encoding="utf-8"))

def find_in_gz(frag):
    for u, v in GZ.items():
        if frag in (v.get("title") or ""):
            return {"url": u, "content": v.get("content") or "", "date": v.get("date")}
    return None

def find_in_list(lst, frag):
    for r in lst:
        if frag in (r.get("title") or ""):
            return r
    return None

def find_in_gs(frag):
    for k, v in GS.items():
        if frag in (v.get("title") or ""):
            return v
    return None

PICKS = [
    # (region, province, source, info_type, title-fragment, budget-hint)
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "中国共产党四川省委员会党校教学设施设备建设媒体制作中心设备采购项目(二次)", "251.37"),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "中共成都市委党校实训室升级改造项目", "185"),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "四川长征干部学院泸州四渡赤水分院信息化教室和教育馆设施设备采购(二次)", "156"),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "成都干部网络培训平台2026年云资源采购项目", "130"),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "中共甘孜州委党校教育课程研究与开发服务", "60"),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "中共青川县委党校质量提升项目", ""),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "干部教育培训机构质量提升项目(三次)", ""),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "中共金阳县委党校干部教育培训设备", ""),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "四川财经职业学院党建、绩效数智提升(二次)", "30"),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "互联网企业党建工作项目", "74.6"),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "彝海结盟纪念馆数字展陈提升项目竞争性磋商", "96"),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "宜宾市融媒体中心产城融合促进区域协调发展系列视频采购项目", "60"),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "泸州职业技术学院智慧校园一体化工作平台建设服务项目(二次)", "195"),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "成都市郫都区委员会组织部", ""),
    ("sc", "四川", "四川省公共资源交易信息网", "中标公告", "蒲江廉洁文化基地展陈布展项目", "29.75"),
    ("sc", "四川", "四川省公共资源交易信息网", "中标公告", "彭州市商圈党建阵地建设项目", "307.38"),
    ("sc", "四川", "四川省公共资源交易信息网", "中标公告", "阿坝州委党校教学及辅助教学设施设备购置", ""),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "四川省教育融媒体中心（四川教育电视台）全媒体演播室建设LED显示屏采购项目", ""),
    ("sc", "四川", "四川省公共资源交易信息网", "招标公告", "雅安市2026年中青年干部培训班专业能力高校培训服务采购项目(二次)", "45"),
    # 重庆
    ("cq", "重庆", "重庆市公共资源交易网", "招标公告", "“党建·风正巴渝”应用", ""),
    ("cq", "重庆", "重庆市公共资源交易网", "招标公告", "党性教育（党校史）展陈策展及布展服务", ""),
    ("cq", "重庆", "重庆市公共资源交易网", "招标公告", "大渡口区政协文史展陈深化设计及布展服务项目", ""),
    ("cq", "重庆", "重庆市公共资源交易网", "招标公告", "智慧校园建设智慧教育应用", ""),
    ("cq", "重庆", "重庆市公共资源交易网", "招标公告", "梁平非遗展厅展陈及智慧空间项目", ""),
    ("cq", "四川", "成都市公共资源交易服务中心", "招标公告", "蒲江县铁溪村抓党建促乡村振兴首席顾问赋能提升项目", ""),
    # 甘肃
    ("gs", "甘肃", "甘肃省政府采购网", "招标公告", "兰州市融媒体中心建设项目(第六包、第七包、第八包、第九包）二次招标公告", ""),
    ("gs", "甘肃", "甘肃省政府采购网", "中标公告", "兰州市融媒体中心建设项目（省市平台贯通）", ""),
    ("gs", "甘肃", "甘肃省政府采购网", "招标公告", "宕昌县铸牢中华民族共同体意识宣传教育阵地展陈提升项目", ""),
    ("gs", "甘肃", "甘肃省政府采购网", "招标公告", "民乐县乡村振兴干部人才培训项目", ""),
    ("gs", "甘肃", "甘肃省政府采购网", "中标公告", "两当兵变纪念馆改造提升", ""),
    ("gs", "甘肃", "甘肃省政府采购网", "单一来源公示", "全省县级融媒体中心使用新华社稿件服务项目", ""),
    ("gs", "甘肃", "甘肃省政府采购网", "意向公开", "中国共产党庆阳市西峰区委员会党校2026年度政府采购意向公告", ""),
]

CORE_KW = ["党校", "干部学院", "干部教育", "党员教育", "党建", "组织部", "党群", "融媒体",
           "展陈", "布展", "宣传片", "视频", "课程", "课件", "智慧校园", "信息化", "培训",
           "数字化", "智慧", "互联网", "纪念馆", "廉洁", "阵地", "演播", "云资源", "网络培训"]
NOISE = ["食堂", "餐饮", "食材", "家具", "空调", "物业", "印刷", "复印纸", "桌椅", "宿舍",
         "医疗", "广告", "图书", "消防"]

out = []
missing = []
for kind, prov, source, ty, frag, bh in PICKS:
    rec = None
    if kind == "sc":
        r = find_in_gz(frag)
        if r:
            rec = {"title": "", "url": r["url"], "content": r["content"], "pub_date": r["date"]}
            for u, v in GZ.items():
                if u == r["url"]:
                    rec["title"] = v.get("title")
    elif kind == "cq":
        r = find_in_list(CQ, frag)
        if r:
            rec = {"title": r["title"], "url": r["url"], "content": r.get("page_text", ""),
                   "pub_date": r.get("pub_date", ""), "buyer": r.get("buyer", ""),
                   "budget_hint": r.get("budget", "")}
    elif kind == "gs":
        r = find_in_gs(frag)
        if r:
            rec = {"title": r["title"],
                   "url": "https://www.ccgp-gansu.gov.cn/maincms-web/articleGs?type=article&id=" + r["id"],
                   "content": r.get("desc", ""), "pub_date": (r.get("noticeTime") or "")[:10],
                   "buyer": r.get("purchaser", ""), "budget_hint": r.get("budget") or ""}
    if not rec:
        missing.append(frag)
        continue
    t = rec["title"] or frag
    if not any(k in t for k in CORE_KW) or any(n in t for n in NOISE):
        missing.append(frag + "  [FILTERED:%s]" % t[:40])
        continue
    rec.update({"province": prov, "source": source, "info_type": ty, "budget_hint": bh})
    out.append(rec)

print("curated:", len(out), " missing:", len(missing))
for m in missing:
    print("  MISS:", m)
json.dump(out, io.open(os.path.join(BASE, "curated_0925.json"), "w", encoding="utf-8"),
          ensure_ascii=False, indent=1)
for i, r in enumerate(out, 1):
    print("%02d | %-4s | %-8s | %-58s | %s" % (i, r["province"], r["info_type"], r["title"][:58], r["pub_date"]))
