#!/usr/bin/env python3
"""Tạo báo cáo tổng hợp MHT tại Minh Hưng Tiến từ nội dung mới nhất trong Locqc.md"""

from docx import Document
from docx.shared import Pt, Cm, RGBColor, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import qn, nsdecls
from docx.oxml import parse_xml
import os

DIR = r"C:\antigra-DS\CLAW_LAM_VIEC\Bao cao - Hanh chinh\KPH\BA0-CAO\MinhHungTien-66-WH-sai-mau"
IMG_DIR = os.path.join(DIR, "images_kph")
IMG_SOSANH_MHT66 = os.path.join(IMG_DIR, "mau_so_sanh_MHT66_PU_vs_NC_30-07-2026.jpg")
IMG_GOCTU = os.path.join(IMG_DIR, "goc_tu_MHT66_son_mai_30-07-2026.jpg")
IMG_KYDUYET = os.path.join(IMG_DIR, "mau_cong_doan_pu_MHT66_MAT67_30-07-2026.jpg")
IMG_MHT67 = r"C:\antigra-DS\CLAW_LAM_VIEC\QC\Bao cao\img_42219c8d613b.jpg"
OUT = os.path.join(DIR, "Bao-cao-cap-nhat-su-co-MHT-Minh-Hung-Tien_30-07-2026.docx")

doc = Document()

style = doc.styles['Normal']
style.font.name = 'Times New Roman'
style.font.size = Pt(12)
style.element.rPr.rFonts.set(qn('w:eastAsia'), 'Times New Roman')

def sc(cell, text, bold=False, size=9, color=None, bg=None, align=WD_ALIGN_PARAGRAPH.LEFT):
    cell.text = ""
    p = cell.paragraphs[0]
    p.alignment = align
    p.paragraph_format.space_before = Pt(1)
    p.paragraph_format.space_after = Pt(1)
    run = p.add_run(str(text))
    run.font.name = "Times New Roman"
    run.font.size = Pt(size)
    run.bold = bold
    if color: run.font.color.rgb = color
    if bg:
        shading = parse_xml(f'<w:shd {nsdecls("w")} w:fill="{bg}"/>')
        cell._tc.get_or_add_tcPr().append(shading)

def header_row(table, headers):
    for ci, h in enumerate(headers):
        sc(table.rows[0].cells[ci], h, bold=True, size=9, color=RGBColor(255,255,255), bg="2F5496", align=WD_ALIGN_PARAGRAPH.CENTER)

def add_img(doc, path, caption, width=5.2):
    p = doc.add_paragraph()
    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = p.add_run()
    run.add_picture(path, width=Inches(width))
    p = doc.add_paragraph()
    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = p.add_run(caption)
    run.font.name = "Times New Roman"
    run.font.size = Pt(9)
    run.italic = True

def add_p(doc, text, bold=False, size=12):
    p = doc.add_paragraph()
    run = p.add_run(text)
    run.font.name = "Times New Roman"
    run.font.size = Pt(size)
    run.bold = bold
    return p

# ═══════════════════════════════════
# TRANG BÌA
# ═══════════════════════════════════
doc.add_paragraph()

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("CÔNG TY TNHH SX-TM HÓA KEO BÌNH THẠNH")
run.bold = True
run.font.size = Pt(14)
run.font.name = "Times New Roman"
run.font.color.rgb = RGBColor(47, 84, 150)

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("PHÒNG QC — BỘ PHẬN KỸ THUẬT")
run.bold = True
run.font.size = Pt(13)
run.font.name = "Times New Roman"

doc.add_paragraph()

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("BÁO CÁO CẬP NHẬT SỰ CỐ MÀU MHT")
run.bold = True
run.font.size = Pt(18)
run.font.name = "Times New Roman"
run.font.color.rgb = RGBColor(47, 84, 150)

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("Công ty Minh Hưng Tiến — Khách hàng FlexiLoad")
run.font.size = Pt(14)
run.font.name = "Times New Roman"

doc.add_paragraph()
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("Ngày báo cáo: 30/07/2026")
run.font.size = Pt(12)
run.font.name = "Times New Roman"
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("Người báo cáo: Bùi Thiên Lộc")
run.font.size = Pt(12)
run.font.name = "Times New Roman"

doc.add_page_break()

# ═══════════════════════════════════
# PHẦN I: TÌNH HÌNH SẢN XUẤT
# ═══════════════════════════════════
doc.add_heading("I. TÌNH HÌNH SẢN XUẤT & KIỂM TRA CHẤT LƯỢNG CÁC MÃ MÀU", level=1)

doc.add_heading("1. Mã màu MHT 66 (WH) — Khách hàng FlexiLoad", level=2)

add_p(doc, "Sự cố lô cũ & Xử lý:")
p = doc.add_paragraph("• Lô 130 tủ 3 hộc kéo (dùng sơn màu NC MHT 66 mã số 110726) bị khách hàng phản ánh sai màu (so với mẫu sản phẩm tủ do Kỹ thuật & QC khách hàng ký ngày 10/07/2026 và thẻ màu gốc ký ngày 16/04/2026).", style='List Bullet')
for run in p.runs: run.font.name = "Times New Roman"; run.font.size = Pt(11)
p = doc.add_paragraph("• Kỹ thuật đã xử lý phun lại sơn màu NC MHT 66, QC khách hàng kiểm tra đạt và tiến hành đóng gói ngày 29/07/2026.", style='List Bullet')
for run in p.runs: run.font.name = "Times New Roman"; run.font.size = Pt(11)

add_p(doc, "Thử nghiệm & Sản xuất lô mới:", bold=True)
p = doc.add_paragraph("• Ngày 29/07/2026: Kỹ thuật test mã sơn màu MHT 66 mới (mã 160726) trên 1 sản phẩm tủ 3 hộc kéo → Kết quả: ĐẠT (có xác nhận Quản đốc nhà máy).", style='List Bullet')
for run in p.runs: run.font.name = "Times New Roman"; run.font.size = Pt(11)
p = doc.add_paragraph("• Ngày 30/07/2026: Sản xuất đại trà — Chuyền Pallet & Chuyền treo: đạt, đóng gói. Chân bàn Ngũ giác: lệch tông trắng → 260 chi tiết phải sửa lại.", style='List Bullet')
for run in p.runs: run.font.name = "Times New Roman"; run.font.size = Pt(11)

p = doc.add_paragraph()
run = p.add_run("⚠ Vấn đề thẻ màu: ")
run.bold = True; run.font.name = "Times New Roman"; run.font.size = Pt(11)
run = p.add_run("Thẻ gỗ tại xưởng (110626, 160626) không giống thẻ màu Gốc. QC FlexiLoad so màu theo mẫu tủ thành phẩm đã ký (trắng hơn thẻ gốc 16/04/2026). Cần thống nhất chuẩn so màu.")
run.font.name = "Times New Roman"; run.font.size = Pt(11)

doc.add_heading("2. Các mã màu khác", level=2)

t = doc.add_table(rows=4, cols=3)
t.style = 'Table Grid'; t.alignment = WD_TABLE_ALIGNMENT.CENTER
header_row(t, ["Mã màu", "Khách hàng", "Tình trạng"])
data = [
    ("MHT 67", "FlexiLoad", "✅ QC khách hàng kiểm tra đạt, cho phép đóng gói"),
    ("MHT 68 (Veneer Oak)", "FlexiLoad", "⚠ Sản phẩm nốc rời đạt, ráp bộ bị lệch màu. KT Chí hỗ trợ dặm stain + bóng lại"),
    ("MHT 102, 126, 08", "Excess", "✅ Sản xuất chuyền 3, chất lượng & màu sắc đạt"),
]
for ri, (a, b, c) in enumerate(data):
    sc(t.rows[ri+1].cells[0], a, size=9)
    sc(t.rows[ri+1].cells[1], b, size=9)
    sc(t.rows[ri+1].cells[2], c, size=9)

doc.add_paragraph()

# ═══════════════════════════════════
# PHẦN II: TỶ LỆ LỖI & NHÂN SỰ
# ═══════════════════════════════════
doc.add_heading("II. TỔNG HỢP TỶ LỆ LỖI & PHÂN CÔNG NHÂN SỰ", level=1)

add_p(doc, "Tỷ lệ tái chế / Lỗi phôi: ~30%", bold=True, size=12)
add_p(doc, "Sản phẩm FlexiLoad kiểm tra 100% từng sản phẩm, đạt mới đóng mộc + tem Pass.")

t = doc.add_table(rows=3, cols=3)
t.style = 'Table Grid'; t.alignment = WD_TABLE_ALIGNMENT.CENTER
header_row(t, ["Nguyên nhân", "Mã màu", "Ghi chú"])
sc(t.rows[1].cells[0], "🔴 Không đều màu", size=9)
sc(t.rows[1].cells[1], "Màu 68 (Veneer Oak)", size=9)
sc(t.rows[1].cells[2], "Lệch màu khi ráp bộ", size=9)
sc(t.rows[2].cells[0], "🔴 Cấn móp — lỗi phôi gỗ", size=9)
sc(t.rows[2].cells[1], "Màu 66, 67", size=9)
sc(t.rows[2].cells[2], "Màu Pigment (66 WH): phải phủ sơn lại", size=9)

doc.add_paragraph()
doc.add_heading("Phân công nhân sự Kỹ thuật tại xưởng", level=2)

t = doc.add_table(rows=4, cols=2)
t.style = 'Table Grid'; t.alignment = WD_TABLE_ALIGNMENT.CENTER
header_row(t, ["Nhân sự", "Nhiệm vụ"])
sc(t.rows[1].cells[0], "KT Thường", bold=True, size=9)
sc(t.rows[1].cells[1], "Kiểm tra chất lượng trước SX màu 126, 102 và trên chuyền các màu 126, 102, 66, 67", size=9)
sc(t.rows[2].cells[0], "KT Chí (Tăng cường)", bold=True, size=9)
sc(t.rows[2].cells[1], "Chỉnh phụng màu MHT 66; Hỗ trợ chỉnh màu sản phẩm nốc 68", size=9)
sc(t.rows[3].cells[0], "KT Tròn (Tổ trưởng)", bold=True, size=9)
sc(t.rows[3].cells[1], "Kiểm tra chung, chỉnh màu MHT 66; Làm việc với khách hàng", size=9)

doc.add_paragraph()

# ═══════════════════════════════════
# PHẦN III: HÌNH ẢNH MHT-66
# ═══════════════════════════════════
doc.add_heading("III. HÌNH ẢNH BỔ SUNG — MHT-66 (WH)", level=1)
add_p(doc, "Bổ sung 03 hình ảnh mẫu công đoạn, mẫu so sánh và tem QC trên sản phẩm thực tế MHT-66 (WH).")

doc.add_heading("3.1. So sánh hệ PU+UV vs Hệ NC cho MHT-66 (WH)", level=2)
add_img(doc, IMG_SOSANH_MHT66, "So sánh 02 mẫu màu công đoạn MHT-66 (WH) — Trái: Lót 2U+trg → PU MHT-66(BH) → UV / Phải: Lót NC 2402 1U Ang+trg → Lót NC MHT-66(NV)")

t = doc.add_table(rows=4, cols=3)
t.style = 'Table Grid'; t.alignment = WD_TABLE_ALIGNMENT.CENTER
header_row(t, ["", "Mẫu trái (Hệ PU+UV)", "Mẫu phải (Hệ NC)"])
sc(t.rows[1].cells[0], "Lót cạnh", bold=True, size=9)
sc(t.rows[1].cells[1], "Lót màu ↑ 2U + trg", size=9)
sc(t.rows[1].cells[2], "Lót NC 2402 | 1U Ang + trg", size=9)
sc(t.rows[2].cells[0], "Màu công đoạn", bold=True, size=9)
sc(t.rows[2].cells[1], "PU MHT-66 (BH) + UV↑", size=9)
sc(t.rows[2].cells[2], "Lót NC MHT-66 (NV)", size=9)
sc(t.rows[3].cells[0], "Ngày", bold=True, size=9)
sc(t.rows[3].cells[1], "3/7/2026", size=9, align=WD_ALIGN_PARAGRAPH.CENTER)
sc(t.rows[3].cells[2], "3/7/2026", size=9, align=WD_ALIGN_PARAGRAPH.CENTER)

doc.add_paragraph()

doc.add_heading("3.2. Góc tủ thành phẩm sơn mài MHT-66", level=2)
add_img(doc, IMG_GOCTU, "Góc tủ bếp sơn mài MHT-66 — Tem ghi: Sơn Mài MHT-66 — Tủ dưới bếp — B1, Mẫu mới — Duyệt")

doc.add_heading("3.3. Mẫu công đoạn PU ký duyệt Kỹ Thuật", level=2)
add_img(doc, IMG_KYDUYET, "Mẫu công đoạn PU ký duyệt — Trái: MHT-66 (AH) panel trắng / Phải: MAT-67 (DL) panel xanh — ngày 3/7/2026")

# ═══════════════════════════════════
# PHẦN IV: SO SÁNH MẪU MHT-67 (BL)
# ═══════════════════════════════════
doc.add_heading("IV. CẬP NHẬT SO SÁNH MẪU MÀU MHT-67 (BL)", level=1)

add_p(doc, "Đối chiếu mẫu màu công đoạn mới (Lót màu ZU + PU Max 67 UV) với mẫu gốc MHT-67 (BL) đang lưu tại xưởng.")

add_img(doc, IMG_MHT67, "So sánh 02 mẫu MHT-67 (BL) — Trái: Lót màu ZU + PU Max 67 UV / Phải: Lót màu NZ (mẫu gốc)")

t = doc.add_table(rows=4, cols=4)
t.style = 'Table Grid'; t.alignment = WD_TABLE_ALIGNMENT.CENTER
header_row(t, ["Chỉ tiêu", "Mẫu mới (ZU + PU Max 67)", "Mẫu gốc MHT-67 (BL)", "Nhận xét"])
sc(t.rows[1].cells[0], "Màu sắc", bold=True, size=9)
sc(t.rows[1].cells[1], "Xanh lam nhạt pha xám", size=9, align=WD_ALIGN_PARAGRAPH.CENTER)
sc(t.rows[1].cells[2], "Xanh lam đậm (steel blue)", size=9, align=WD_ALIGN_PARAGRAPH.CENTER)
sc(t.rows[1].cells[3], "⚠ Lệch tông — mới nhạt hơn", size=9)
sc(t.rows[2].cells[0], "Bề mặt panel", bold=True, size=9)
sc(t.rows[2].cells[1], "Orange peel", size=9, align=WD_ALIGN_PARAGRAPH.CENTER)
sc(t.rows[2].cells[2], "Láng mịn, mờ", size=9, align=WD_ALIGN_PARAGRAPH.CENTER)
sc(t.rows[2].cells[3], "⚠ Cần chỉnh thông số phun", size=9)
sc(t.rows[3].cells[0], "Cạnh dọc", bold=True, size=9)
sc(t.rows[3].cells[1], "Mịn, thấy vân gỗ", size=9, align=WD_ALIGN_PARAGRAPH.CENTER)
sc(t.rows[3].cells[2], "Láng mịn", size=9, align=WD_ALIGN_PARAGRAPH.CENTER)
sc(t.rows[3].cells[3], "⚠ Chưa đồng nhất", size=9)

doc.add_paragraph()

add_p(doc, "Kết luận: Công thức mới chưa đạt yêu cầu so với mẫu gốc MHT-67 (BL).", bold=True, size=12)

# ═══════════════════════════════════
# PHẦN V: KẾ HOẠCH HÀNH ĐỘNG
# ═══════════════════════════════════
doc.add_heading("V. KẾ HOẠCH HÀNH ĐỘNG TIẾP THEO", level=1)

t = doc.add_table(rows=5, cols=2)
t.style = 'Table Grid'; t.alignment = WD_TABLE_ALIGNMENT.CENTER
header_row(t, ["STT", "Nội dung"])
kv = [
    ("1", "Thống nhất chuẩn so màu — Kỹ thuật làm việc lại với nhà máy theo thẻ màu gốc đã ký"),
    ("2", "Xử lý gấp 260 chi tiết chân bàn Ngũ giác MHT 66 bị lệch tông trắng trước khi ráp bộ"),
    ("3", "Tiếp tục hỗ trợ chỉnh dặm màu 68 trực tiếp trên chuyền để giảm tỷ lệ tái chế (~30%)"),
    ("4", "Điều chỉnh công thức Lót ZU + PU Max 67 cho khớp tông mẫu gốc MHT-67 (BL); chỉnh thông số phun khử orange peel; làm lại mẫu trình QC FlexiLoad xác nhận trước SX đại trà"),
]
for ri, (stt, nd) in enumerate(kv):
    sc(t.rows[ri+1].cells[0], stt, size=9, align=WD_ALIGN_PARAGRAPH.CENTER)
    sc(t.rows[ri+1].cells[1], nd, size=9)

doc.add_paragraph()
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.RIGHT
run = p.add_run("Ngày 30 tháng 07 năm 2026")
run.font.name = "Times New Roman"; run.font.size = Pt(11)
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.RIGHT
run = p.add_run("QC Bùi Thiên Lộc")
run.bold = True; run.font.name = "Times New Roman"; run.font.size = Pt(12)

# ─── Lưu ───
doc.save(OUT)
print(f"✅ Đã tạo: {OUT}")
