# -*- coding: utf-8 -*-
"""Trích trường tuỳ chỉnh 01–17 của các job Base đã tải + gom thảo luận có 'Nguyên nhân'."""
import io, os, re, json, glob

TMP = r"C:\Users\admin\AppData\Local\Temp\base_jobs"
OUT = r"C:\Claw 2\QC\Base\du_lieu_base.json"

def clean(s):
    s = re.sub(r"!\[[^\]]*\]\([^)]*\)", " ", s)          # ảnh
    s = re.sub(r"\[([^\]]*)\]\([^)]*\)", r"\1", s)        # link
    s = re.sub(r"[ \t]+", " ", s)
    s = re.sub(r"\n{2,}", "\n", s)
    return s.strip()

def field(block, num, nxt):
    """Lấy giá trị giữa nhãn số `num` và nhãn số kế `nxt`."""
    m = re.search(rf"\n0*{num}\n(.+?)(?=\n0*{nxt}\n|\Z)", block, re.S)
    return clean(m.group(1)) if m else ""

def parse(path):
    t = io.open(path, encoding="utf-8").read()
    i1, i2 = t.find("Trường tuỳ chỉnh"), t.find("Danh sách công việc")
    block = clean(t[i1:i2]) if i1 > 0 and i2 > i1 else ""
    # tiêu đề job
    m = re.search(r"^#\s*(.+)$", t, re.M)
    title = clean(m.group(1)) if m else ""
    # dòng tóm tắt có 'Ngày kiểm tra:'
    m2 = re.search(r"Ngày kiểm tra: (.{0,400})", t)
    head = clean(m2.group(1)) if m2 else ""
    # công việc con
    jobsec = t[t.find("Danh sách công việc"):]
    cvs = re.findall(r"\n([^\n!|]{3,80})\n!\[[^\]]*\]\([^)]*\)\n(Hoàn thành|Đang làm|Chưa làm[^\n]*)\n(Đã giao cho [^\n]+)", jobsec)
    # các đoạn 'Nguyên nhân' trong thảo luận (chỉ lấy câu ngắn)
    nn = []
    for m3 in re.finditer(r"Nguyên nhân[^\n:]*:\s*([^\n]{5,220})", t):
        s = clean(m3.group(1))
        if s and s not in nn:
            nn.append(s)
    return {
        "file": os.path.basename(path),
        "tieu_de": title,
        "tom_tat": head,
        "01_ngay_kt": field(block, 1, 2),
        "02_san_pham": field(block, 2, 3)[:220],
        "03_khong_dat": field(block, 3, 4)[:400],
        "04_quy_trinh": field(block, 4, 5)[:320],
        "05_ket_qua": field(block, 5, 6)[:300],
        "06_luong_chinh": field(block, 6, 7)[:150],
        "08_de_xuat": field(block, 8, 9)[:300],
        "nguyen_nhan": nn[:4],
        "cong_viec": [{"ten": c[0].strip(), "trang_thai": c[1].strip(),
                       "giao": c[2].replace("Đã giao cho ", "")} for c in cvs],
    }

files = sorted(glob.glob(os.path.join(TMP, "job_*.md")))
data = {}
for f in files:
    jid = re.search(r"job_(\d+)", f).group(1)
    data[jid] = parse(f)
json.dump(data, open(OUT, "w", encoding="utf-8"), ensure_ascii=False, indent=1)
print("đã trích", len(data), "job →", OUT)

for jid, d in data.items():
    print("\n" + "=" * 100)
    print(f"JOB {jid} | {d['tieu_de'][:100]}")
    print(f"  01 Ngày KT: {d['01_ngay_kt'][:60]}")
    print(f"  02 SP: {d['02_san_pham'][:150]}")
    print(f"  03 Không đạt: {d['03_khong_dat'][:260]}")
    print(f"  05 Kết quả: {d['05_ket_qua'][:200]}")
    print(f"  08 Đề xuất: {d['08_de_xuat'][:200]}")
    if d["nguyen_nhan"]:
        print(f"  NN: {d['nguyen_nhan'][0][:220]}")
    print(f"  CV: {len(d['cong_viec'])} | chưa xong: "
          f"{[c['ten'][:38] for c in d['cong_viec'] if c['trang_thai'] != 'Hoàn thành']}")
