# -*- coding: utf-8 -*-
"""Phân loại 39 vụ Base (mọi cột) theo nhóm sự vụ, in thống kê."""
import json, os, re, glob, collections

TMP = r"C:\Users\admin\AppData\Local\Temp\base_jobs"
D = r"C:\Claw 2\QC\Base"
cards = json.load(open(os.path.join(TMP, "board_cards.json"), encoding="utf-8"))
STAGES = {"95344": "Thông tin không phù hợp", "95246": "Kiểm tra & xử lý sự cố",
          "95248": "QC & KT kiểm tra nguyên nhân gốc rễ", "95250": "GD duyệt kết quả báo cáo",
          "95252": "Theo dõi tình trạng", "98799": "Theo dõi - nghiên cứu",
          "95244": "Hoàn thành", "95245": "Thất bại"}
ids, meta = [], {}
for st, items in cards.items():
    for x in items:
        ids.append(x["job"])
        meta[x["job"]] = {"stage": st, "stage_ten": STAGES.get(st, st),
                          "title": re.sub(r"\s*\|\s*(Không thời hạn|\d{2}:\d{2} \d{2}/\d{2}/\d{4}).*$", "", x["title"]).strip(),
                          "cv": x["cv"]}

data = json.load(open(os.path.join(D, "du_lieu_base.json"), encoding="utf-8"))
data = {k: v for k, v in data.items() if k in ids}
print("số vụ phân tích:", len(data), "/ 39")

GROUPS = [
    ("A. Sai màu / lệch tông màu", ["sai màu", "màu sai", "lệch màu", "co màu", "táp màu",
                                     "không giống mẫu", "thiếu đỏ", "vàng hơn mẫu", "nhạt hơn", "đậm hơn"]),
    ("B. Sai độ bóng", ["độ bóng"]),
    ("C. Chất lượng sơn / nguyên liệu (lắng – vón – độ nhớt)", ["lắng", "kết tủa", "vón", "độ nhớt", "đóng cục", "đục"]),
    ("D. Bám dính kém / tróc – bong màng sơn", ["tróc", "bám không đạt", "bong", "giộp", "nhả keo"]),
    ("E. Dính màng khi xếp chồng / đóng gói", ["dính mút", "dính bìa", "dính carton", "dính sơn", "dính dấu vân tay", "bị dính"]),
    ("F. Khuyết tật màng sơn (đốm trắng – lõm dầu – nhám – sọc)", ["đốm", "lõm dầu", "nhám", "sọc", "vệt"]),
    ("G. Xì vàng / xì dầu mắt gỗ", ["xì vàng", "xì dầu", "tươm dầu"]),
    ("H. Bề mặt phôi – cước – ghim gỗ – độ phủ", ["cước", "ghim", "sọc ngang", "lông nhám", "độ phủ", "xốp"]),
    ("I. Nứt màng sơn", ["nứt"]),
    ("J. Dộp ván / xù ghim (nền veneer – gỗ xốp)", ["dộp", "xù ghim", "thấm"]),
    ("K. Cháy – vàng – biến đổi màu theo thời gian", ["cháy", "ngả vàng", "vàng theo thời gian", "biến màu"]),
]

def text_of(d):
    parts = [d.get("title", ""), d.get("san_pham", ""), d.get("ket_qua", ""), d.get("quy_trinh", "")]
    parts += [(x.get("loai") or "") + " " + (x.get("giai_thich") or "") for x in d.get("loai_sai", [])]
    parts += d.get("nguyen_nhan", [])
    return " ".join(parts).lower()

res = collections.OrderedDict((g, []) for g, _ in GROUPS)
res["Z. Chưa khớp nhóm nào"] = []
for jid, d in data.items():
    t = text_of(d)
    hit = [g for g, kws in GROUPS if any(k in t for k in kws)]
    for g in hit:
        res[g].append(jid)
    if not hit:
        res["Z. Chưa khớp nhóm nào"].append(jid)

print("\n=== THỐNG KÊ THEO NHÓM ===")
for g, lst in res.items():
    if lst:
        print(f"{g:58} {len(lst):>2} vụ")

print("\n=== CHI TIẾT TỪNG NHÓM ===")
for g, lst in res.items():
    if not lst:
        continue
    print(f"\n### {g} — {len(lst)} vụ")
    for jid in lst:
        d = data[jid]
        ls = "; ".join((x.get("loai") or "?").strip() for x in d["loai_sai"])
        print(f"   • {d.get('title', '')[:56]:58} | {d.get('stage_ten', '')[:20]:22} | KT {d.get('ngay_kt','')[:10]} | loại: {ls[:26]}")

json.dump({g: v for g, v in res.items()}, open(os.path.join(D, "nhom_su_vu.json"), "w", encoding="utf-8"),
          ensure_ascii=False, indent=1)
