import os
import sys
import json
import base64
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

sys.stdout.reconfigure(encoding='utf-8')

# Tự động cài đặt python-docx nếu chưa có
try:
    import docx
except ImportError:
    import subprocess
    subprocess.check_call([sys.executable, "-m", "pip", "install", "python-docx"])
    import docx

from docx import Document
from docx.shared import Inches, Pt
from docx.dml.color import RGBColor

# 1. Khởi tạo tài liệu DOCX cho Báo cáo ổn định màu của Nguyễn Thị Yến
doc = Document()

# Tiêu đề báo cáo
title = doc.add_heading('CÔNG TY TNHH SXTM HÓA KEO BÌNH THẠNH', 1)
doc.add_paragraph('Phụ lục: 01B\nMã quy trình: QT-KT-SPM/02\n')

title_main = doc.add_heading('BÁO CÁO KẾT QUẢ KIỂM TRA ỔN ĐỊNH MÀU SƠN PKP KW 536H', 0)
doc.add_paragraph('Số báo cáo kiểm tra: 03.02 - 0626\nNgày kiểm tra: 01/07/2026\nNgười báo cáo: Nguyễn Thị Yến (Bộ phận QC1)\nNgày lập báo cáo: 22/07/2026\n')

# Phần A
doc.add_heading('A. Thông tin sản phẩm & Mục đích kiểm tra', level=1)
doc.add_paragraph('• Tên sản phẩm: Sơn màu PKP KW 536H')
doc.add_paragraph('• Nguyên nhân & Mục đích: Kiểm tra độ ổn định màu sắc theo thời gian khi sử dụng phụ gia HV-BEX và phụ gia CX 5%.')

# Phần B
doc.add_heading('B. Phương pháp / Quy trình thực hiện', level=1)
doc.add_paragraph('• Pha chế công thức màu:\n'
                   '  - Mẫu đối chứng: Không có phụ gia.\n'
                   '  - Mẫu HV-BEX: Sử dụng 5% phụ gia HV-BEX.\n'
                   '  - Mẫu CX: Sử dụng 5% phụ gia CX 5%.')
doc.add_paragraph('• Quy trình tiến hành:\n'
                   '  - Khuấy đều hỗn hợp bằng máy khuấy với tốc độ 30 vòng/phút trong thời gian 5 phút.\n'
                   '  - Kéo màng sơn bằng thước kéo cỡ 76 µ lên giấy thử màu.\n'
                   '  - Phun mẫu lên tấm MDF đã lót trắng WS1.\n'
                   '  - Tiến hành đo giá trị màu Lab của từng mẫu lúc mới pha bằng máy so màu Spectro I.\n'
                   '  - So sánh giá trị Lab của mẫu mới pha với mẫu sau 1 ngày, 3 ngày và 10 ngày.')

# Phần C
doc.add_heading('C. Kết quả kiểm tra chi tiết', level=1)

# C.1. Bảng kiểm tra công thức sản xuất
doc.add_heading('1. Kiểm tra công thức sản xuất (Đánh giá sau 1 ngày)', level=2)
table1 = doc.add_table(rows=1, cols=6)
table1.style = 'Table Grid'
hdr_cells = table1.rows[0].cells
hdr_cells[0].text = 'Công thức'
hdr_cells[1].text = 'Mẫu thử'
hdr_cells[2].text = 'Lab Mới Pha'
hdr_cells[3].text = 'Lab Sau 1 Ngày'
hdr_cells[4].text = 'Độ lệch ΔLab (ΔL)'
hdr_cells[5].text = 'Nhận xét'

# Dữ liệu bảng 1
data1 = [
    ("Không có phụ gia", "Phun gỗ", "36.80\n-1.37\n-4.55", "38.10\n-1.53\n-4.69", "ΔL: 1.30", "- Kéo giấy: cả 3 mẫu có hiện tượng sậm màu hơn khi để qua ngày (ΔL từ -0.85 đến -1.02).\n\n- Phun gỗ: cả 3 mẫu có hiện tượng trắng/nhạt màu đi khi để qua ngày (ΔL từ 1.03 đến 1.30)."),
    ("", "Kéo giấy", "42.37\n-1.72\n-5.24", "41.35\n-1.56\n-5.40", "ΔL: -1.02", ""),
    ("Sử dụng 5% HV-BEX", "Phun gỗ", "36.78\n-1.40\n-4.51", "38.07\n-1.47\n-4.76", "ΔL: 1.29", ""),
    ("", "Kéo giấy", "39.87\n-1.58\n-4.97", "39.02\n-1.52\n-4.92", "ΔL: -0.85", ""),
    ("Sử dụng 5% CX 5%", "Phun gỗ", "36.74\n-1.37\n-4.61", "37.77\n-1.43\n-4.73", "ΔL: 1.03", ""),
    ("", "Kéo giấy", "39.58\n-1.45\n-5.19", "38.38\n-1.45\n-5.19", "ΔL: -1.20", "")
]

for row_data in data1:
    row_cells = table1.add_row().cells
    for i, val in enumerate(row_data):
        row_cells[i].text = val

# C.2. Bảng kéo giấy
doc.add_heading('2. Kiểm tra màu đơn trong công thức (Phương pháp Kéo giấy)', level=2)
doc.add_paragraph('Bóng trắng + 7% màu đơn. Theo dõi sau 3 ngày và 10 ngày:')

table2 = doc.add_table(rows=1, cols=7)
table2.style = 'Table Grid'
hdr_cells2 = table2.rows[0].cells
hdr_cells2[0].text = 'Màu đơn (7%)'
hdr_cells2[1].text = 'Lab Mới Pha'
hdr_cells2[2].text = 'Lab Sau 3 Ngày'
hdr_cells2[3].text = 'ΔLab (Sau 3 ngày)'
hdr_cells2[4].text = 'Lab Sau 10 Ngày'
hdr_cells2[5].text = 'ΔLab (Sau 10 ngày)'
hdr_cells2[6].text = 'Nhận xét chi tiết'

data2 = [
    ("Vàng C26W", "81.69\n8.88\n31.34", "81.75\n8.89\n31.37", "L: 0.06\na: 0.01\nb: 0.03", "81.46\n8.78\n31.12", "L: -0.23\na: -0.10\nb: -0.22", "Không đổi màu đáng kể sau 3 ngày và 10 ngày."),
    ("Đỏ BT 01H", "55.43\n51.14\n12.32", "55.75\n49.96\n11.59", "L: 0.32\na: -1.18\nb: -0.73", "55.63\n50.33\n11.76", "L: 0.20\na: -0.81\nb: -0.56", "Không đổi màu sau 3 ngày và 10 ngày."),
    ("Đen BT 01H (066)", "38.46\n-1.03\n-7.43", "38.42\n-0.98\n-7.42", "L: -0.04\na: 0.05\nb: 0.01", "37.63\n-0.95\n-7.27", "L: -0.83\na: 0.08\nb: 0.16", "- Sau 3 ngày: không đổi.\n- Sau 10 ngày: sậm màu hơn nhẹ."),
    ("Đen BT 01H (SBK 07)", "35.28\n-0.87\n-4.89", "35.36\n-0.90\n-4.86", "L: 0.08\na: -0.03\nb: 0.03", "35.29\n-0.87\n-4.87", "L: 0.01\na: 0.00\nb: 0.02", "Không đổi màu sau 3 ngày và 10 ngày (Rất ổn định)."),
    ("Đen BT 01H (2026)", "39.39\n-1.22\n-6.46", "40.70\n-1.28\n-7.08", "L: 1.31\na: -0.06\nb: -0.62", "41.60\n-1.30\n-7.39", "L: 2.21\na: -0.08\nb: -0.93", "- Sau 3 ngày và 10 ngày: Mất màu, trắng lên rất rõ rệt."),
    ("Đen MA 100H", "34.41\n-1.00\n-6.03", "35.09\n-0.97\n-6.30", "L: 0.68\na: 0.03\nb: -0.27", "35.31\n-1.03\n-6.65", "L: 0.90\na: -0.03\nb: -0.62", "- Sau 3 ngày và 10 ngày: Trắng lên rõ rệt (mất màu)."),
    ("Xanh lá G7BW", "64.65\n-39.19\n0.20", "64.66\n-39.34\n0.14", "L: 0.01\na: -0.15\nb: -0.06", "64.48\n-40.81\n0.03", "L: -0.17\na: -1.62\nb: -0.17", "Không đổi sau 3 ngày và 10 ngày."),
    ("Màu PKP KW 536H\n- Đen SBK 07\n- Phụ gia CX 5%", "34.93\n-1.38\n-3.26", "34.90\n-1.47\n-3.21", "L: -0.03\na: -0.09\nb: 0.05", "34.88\n-1.35\n-3.17", "L: -0.05\na: 0.03\nb: 0.09", "Không đổi màu sau 3 ngày và 10 ngày (Đạt yêu cầu ổn định)."),
    ("Màu PKP KW 536H\n- Đen SBK 07\n- Phụ gia HV-BEX", "35.35\n-1.45\n-3.24", "35.34\n-1.36\n-3.29", "L: -0.01\na: 0.09\nb: -0.05", "35.21\n-1.39\n-3.28", "L: -0.14\na: 0.06\nb: -0.04", "Không đổi sau 3 ngày và 10 ngày.")
]

for row_data in data2:
    row_cells = table2.add_row().cells
    for i, val in enumerate(row_data):
        row_cells[i].text = val

# C.3. Bảng phun gỗ
doc.add_heading('3. Kiểm tra màu đơn trong công thức (Phương pháp Phun gỗ/thẻ)', level=2)
doc.add_paragraph('Bóng trắng + 7% màu đơn. Theo dõi sau 3 ngày và 10 ngày:')

table3 = doc.add_table(rows=1, cols=7)
table3.style = 'Table Grid'
hdr_cells3 = table3.rows[0].cells
hdr_cells3[0].text = 'Màu đơn (7%)'
hdr_cells3[1].text = 'Lab Mới Pha'
hdr_cells3[2].text = 'Lab Sau 3 Ngày'
hdr_cells3[3].text = 'ΔLab (Sau 3 ngày)'
hdr_cells3[4].text = 'Lab Sau 10 Ngày'
hdr_cells3[5].text = 'ΔLab (Sau 10 ngày)'
hdr_cells3[6].text = 'Nhận xét chi tiết'

data3 = [
    ("Vàng C26W", "82.93\n8.40\n31.32", "82.10\n8.25\n30.92", "L: -0.83\na: -0.15\nb: -0.40", "82.03\n8.15\n30.91", "L: -0.90\na: -0.25\nb: -0.41", "- Sau 3 ngày và 10 ngày: màu sậm hơn."),
    ("Đỏ BT 01H", "55.48\n52.88\n13.17", "55.91\n51.38\n12.24", "L: 0.43\na: -1.50\nb: -0.93", "55.70\n51.76\n12.45", "L: 0.22\na: -1.12\nb: -0.72", "Không đổi màu sau 3 ngày và 10 ngày."),
    ("Đen BT 01H (066)", "38.71\n-1.02\n-7.84", "39.89\n-1.13\n-8.27", "L: 1.18\na: -0.11\nb: -0.43", "39.25\n-1.05\n-8.03", "L: 0.54\na: -0.03\nb: -0.19", "- Sau 3 ngày: Trắng hơn rõ rệt.\n- Sau 10 ngày: Trắng hơn nhẹ so với mới pha."),
    ("Đen BT 01H (SBK 07)", "37.56\n-1.08\n-5.54", "36.88\n-1.08\n-5.50", "L: -0.68\na: 0.00\nb: 0.04", "36.02\n-1.00\n-5.28", "L: -1.54\na: 0.08\nb: 0.26", "- Sau 3 ngày và 10 ngày: Màu sậm hơn rõ rệt."),
    ("Đen BT 01H (2026)", "38.72\n-1.25\n-6.51", "39.40\n-1.26\n-6.78", "L: 0.68\na: -0.01\nb: -0.27", "40.26\n-1.22\n-7.10", "L: 1.54\na: 0.03\nb: -0.59", "- Sau 3 ngày và 10 ngày: Trắng hơn rõ rệt (Mất màu rất rõ)."),
    ("Đen MA 100H", "33.50\n-0.95\n-6.29", "34.30\n-1.02\n-6.60", "L: 0.80\na: -0.07\nb: -0.31", "34.45\n-0.99\n-6.25", "L: 0.95\na: -0.04\nb: 0.04", "- Sau 3 ngày và 10 ngày: Trắng hơn rõ rệt (Mất màu rất rõ)."),
    ("Xanh lá G7BW", "64.82\n-41.71\n-0.12", "65.33\n-39.82\n-0.34", "L: 0.51\na: 1.89\nb: -0.22", "64.75\n-42.57\n-0.15", "L: -0.07\na: -0.86\nb: -0.03", "Không đổi màu sau 3 ngày và 10 ngày."),
    ("Màu PKP KW 536H\n- Đen SBK 07\n- Phụ gia CX 5%", "35.57\n-1.34\n-3.31", "35.17\n-1.38\n-3.18", "L: -0.40\na: -0.04\nb: 0.13", "35.51\n-1.37\n-3.30", "L: -0.06\na: -0.03\nb: 0.01", "Không đổi màu sau 3 ngày và 10 ngày."),
    ("Màu PKP KW 536H\n- Đen SBK 07\n- Phụ gia HV-BEX", "35.82\n-1.37\n-3.13", "35.55\n-1.43\n-3.20", "L: -0.27\na: -0.06\nb: -0.07", "35.94\n-1.35\n-5.26", "L: 0.12\na: 0.02\nb: -2.13", "Không đổi màu sau 3 ngày và 10 ngày (Đạt yêu cầu).")
]

for row_data in data3:
    row_cells = table3.add_row().cells
    for i, val in enumerate(row_data):
        row_cells[i].text = val

# Phần D
doc.add_heading('D. Nhận xét & Kết luận', level=1)
doc.add_paragraph('• Nguyên nhân sự cố chạy màu: Lô sơn hiện hữu đã giao cho khách hàng sử dụng màu đơn Đen BT 01H (2026). Màu đơn này cùng với màu Đen MA 100H có xu hướng mất màu và bị trắng lên mạnh theo thời gian.')
doc.add_paragraph('• Đánh giá ổn định:\n'
                   '  - Các màu đơn đạt yêu cầu ổn định: Vàng C26W, Đỏ BT 01H, Xanh lá G7BW.\n'
                   '  - Màu đơn thay thế đạt yêu cầu: Đen BT 01H (SBK 07) giữ màu rất ổn định, không bị trắng lên theo thời gian ở cả kéo giấy lẫn phun gỗ.')
doc.add_paragraph('• Phương án xử lý: Bộ phận Kỹ thuật thống nhất từ lô sản xuất tiếp theo sẽ thay thế màu đơn Đen BT 01H (2026) bằng màu Đen BT 01H (SBK 07) nhằm giải quyết dứt điểm hiện tượng chạy màu này.')

docx_filename = 'c:/antigra-DS/CLAW_LAM_VIEC/QC/Bao cao/bao_cao_on_dinh_mau_yen.docx'
doc.save(docx_filename)
print(f"Saved report to {docx_filename}")

# 2. Gửi email qua Gmail API
token_path = os.path.expanduser('~/AppData/Local/hermes/google_agent_token.json')
if os.path.exists(token_path):
    with open(token_path) as f:
        creds = Credentials.from_authorized_user_info(json.load(f))
    
    service = build('gmail', 'v1', credentials=creds)
    
    msg = MIMEMultipart()
    msg['To'] = 'ngoducminh84@gmail.com'
    msg['Subject'] = 'Báo cáo kết quả kiểm tra ổn định màu sơn PKP KW 536H - Nguyễn Thị Yến'
    
    body = (
        "Kính gửi anh Minh,\n\n"
        "Gửi anh báo cáo tổng hợp chi tiết về kết quả kiểm tra độ ổn định màu sơn PKP KW 536H (sử dụng phụ gia HV-BEX và CX 5%) cùng phân tích màu đơn chạy màu dưới dạng file đính kèm DOCX.\n\n"
        "Nội dung báo cáo chi tiết bao gồm:\n"
        "1. Thông tin sản phẩm & Quy trình thử nghiệm màu.\n"
        "2. Bảng kết quả Lab đối chứng mẫu sau 1 ngày, 3 ngày và 10 ngày (kéo giấy & phun thẻ).\n"
        "3. Kết luận nguyên nhân chạy màu của Đen BT 01H (2026) / Đen MA 100H và phương án thay thế bằng Đen BT 01H (SBK 07).\n\n"
        "Trân trọng,\nNguyễn Thị Yến - QC1"
    )
    msg.attach(MIMEText(body, 'plain', 'utf-8'))
    
    with open(docx_filename, 'rb') as f:
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(f.read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', f'attachment; filename="bao_cao_on_dinh_mau_yen.docx"')
        msg.attach(part)
    
    raw = base64.urlsafe_b64encode(msg.as_bytes()).decode()
    result = service.users().messages().send(userId='me', body={'raw': raw}).execute()
    print(f"Email sent successfully to {msg['To']}: {result['id']}")
else:
    print(f"Token not found at {token_path}, cannot send email.")
