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 sự cố Thành Thắng 92
doc = Document()

# Set title
title = doc.add_heading('BÁO CÁO SỰ CỐ DÍNH FOAM BỀ MẶT MÀU THTH 92', 0)
doc.add_paragraph('Địa điểm: Công ty Thành Thắng (Xưởng 4)\nNgười báo cáo: Bùi Thiện Lộc (QC)\nCập nhật ngày: 18/07/2026\n')

# Section 1
doc.add_heading('1. Thông tin chung về sự cố', level=1)
doc.add_paragraph('• Sự cố phát hiện khi chuẩn bị đóng gói sản phẩm mặt bàn màu THTH 92.')
doc.add_paragraph('• Hiện tượng: Phần chi tiết di động (mảnh xếp ở giữa) của mặt bàn bị dính mút PE foam (hít cứng màng sơn, gỡ ra để lại vết mờ/in dấu rõ rệt).')
doc.add_paragraph('• Mức độ ảnh hưởng: Có 9 sản phẩm bị lỗi trong tổng số 100 sản phẩm mặt bàn của lô sản xuất (tỷ lệ lỗi 9%).')

# Section 2
doc.add_heading('2. Nhật ký thử nghiệm & Tìm nguyên nhân', level=1)
doc.add_paragraph('QC đã tiến hành phun thực nghiệm trên phôi gỗ cao su tại kho pha sơn Xưởng 4 để kiểm chứng ảnh hưởng của quy trình sơn và dung môi đến độ khô màng sơn:')
doc.add_paragraph('• Quy trình 1 (Quy trình sản xuất thực tế chuyền pallet xưởng 4): Lau màu THTH 92 -> Lót NC Mod 1106 (2 lần) -> Stain màu -> Bóng NC Mod 1106 40% (Tỷ lệ pha: 10 Bóng : 1 Cứng NC Mod 1106 B : 10 Dung môi NC Mod). Dán foam thử nghiệm sau 6 giờ và sau 16 giờ.')
doc.add_paragraph('  - Kết quả: Màng sơn hoàn toàn khô ráo, không dính foam (Đạt yêu cầu) ✅.')
doc.add_paragraph('• Quy trình 2 (Thử nghiệm thêm 5% dung môi SP): Thực hiện tương tự Quy trình 1 nhưng hỗn hợp bóng pha thêm 5% dung môi SP (chậm ráo bề mặt).')
doc.add_paragraph('  - Kết quả: Dán foam sau 6 giờ có vết mờ nhẹ; dán sau 16 giờ màng sơn đạt (Đạt một phần, cần thời gian khô lâu hơn) ⚠️.')
doc.add_paragraph('• Quy trình 3 (Thử nghiệm thêm 20% dung môi SP): Thực hiện tương tự Quy trình 1 nhưng hỗn hợp bóng pha thêm 20% dung môi SP.')
doc.add_paragraph('  - Kết quả: Dán foam sau 6 giờ và sau 16 giờ đều bị dính foam nặng, in vết mút (Không đạt) ❌.')
doc.add_paragraph('• Quy trình 4 (Thử nghiệm tái chế nhanh): Phun hoàn thiện -> sau 4 giờ đem tái chế phủ lại bóng NC Mod 1106 40% -> để sau 16 giờ dán foam.')
doc.add_paragraph('  - Kết quả: Lớp bóng bên dưới chưa khô hẳn bị lớp trên đè lên gây hiện tượng chậm khô tích lũy, dán foam bị dính mút (Không đạt) ❌.')

# Section 3
doc.add_heading('3. Kết luận nguyên nhân gốc rễ (Root Cause)', level=1)
doc.add_paragraph('• Nguyên nhân trực tiếp: Không kiểm soát tốt quy trình khô tại khu vực tái chế sản phẩm lỗi.')
doc.add_paragraph('• Phân tích cụ thể:\n'
                   '  - Hàng sản xuất chạy thẳng trên chuyền phơi 6 tiếng qua đêm là đạt yêu cầu đóng gói, nhưng hàng tái chế do sơn chồng lên lớp cũ chưa khô hoàn toàn nên cần thời gian khô lâu hơn rất nhiều.\n'
                   '  - Xe phơi khu vực tái chế không được ghi chú theo dõi ngày giờ phơi, dẫn đến việc xếp chung sản phẩm tái chế chưa khô hẳn với sản phẩm sản xuất đạt chuẩn.\n'
                   '  - Việc thợ sơn pha dung môi chậm ráo SP không đúng tỷ lệ hoặc sử dụng hỗn hợp sơn tái chế pha sẵn để cả ngày (dung môi bay hơi nhanh, làm biến chất sơn) làm kéo dài thời gian khô bề mặt.')

# Section 4
doc.add_heading('4. Phương án xử lý & Kết quả nghiệm thu', level=1)
doc.add_paragraph('• Quy trình tái chế khắc phục sự cố:\n'
                   '  1. Chà nhám cục bộ làm sạch phần màng sơn bị dính foam tại chi tiết bàn xếp ở mảnh giữa.\n'
                   '  2. Phun dặm bóng NC Mod 1106 30% (tỷ lệ pha 10 Bóng : 1 Cứng : 12 Dung môi, độ nhớt sơn bóng giảm xuống 11-12 giây bằng phễu NK2).\n'
                   '  3. Để phơi khô tự nhiên sau 40 giờ (gần 2 ngày) và dằn kiểm tra foam liên tục trong 2 ngày.')
doc.add_paragraph('• Kết quả nghiệm thu (Ngày 18/07/2026): Kỹ thuật và nhà máy tiến hành khui kiểm tra ngẫu nhiên, xác nhận màng sơn Đạt yêu cầu ổn định hoàn toàn, không còn vết dính. Lô hàng đã được đóng gói chính thức vào thùng carton thành công.')

# Section 5
doc.add_heading('5. Đề xuất & Biện pháp phòng ngừa (Corrective Action)', level=1)
doc.add_paragraph('• Kiểm soát thời gian phơi sản phẩm trên chuyền: Sản phẩm xuống chuyền pallet chất trên xe phơi chờ khô phải được ghi bảng thời gian rõ ràng để đảm bảo đủ thời gian khô trước khi lắp ráp.')
doc.add_paragraph('• Kiểm soát hàng tái chế: Các sản phẩm tái chế phải được phơi ở khu vực riêng, có bảng theo dõi thời gian phơi khô tối thiểu 40 giờ (gần 2 ngày) mới cho chuyển qua bộ phận đóng gói.')
doc.add_paragraph('• Quản lý hỗn hợp sơn pha: Sơn tái chế chỉ pha lượng nhỏ (dưới 5kg mỗi lần) và bắt buộc sử dụng trong vòng 1 buổi làm việc (<= 4 giờ) để tránh dung môi bay hơi làm biến tính sơn.')
doc.add_paragraph('• Kiểm soát dung môi SP: Hỗn hợp sử dụng dung môi SP phải được kiểm soát nghiêm ngặt tỷ lệ pha và có thời gian phơi dài hơn so với hỗn hợp chuẩn.')

docx_filename = 'bao_cao_su_co_thanh_thang_92.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 sự cố dính foam mặt bàn màu THTH 92 - Thành Thắng'
    
    body = (
        "Kính gửi anh Minh,\n\n"
        "Gửi anh báo cáo tổng hợp chi tiết về sự cố dính foam trên mặt bàn màu THTH 92 tại Công ty Thành Thắng dưới dạng file đính kèm DOCX.\n\n"
        "Báo cáo bao gồm chi tiết sự cố, kết quả thử nghiệm quy trình & dung môi SP, nguyên nhân gốc rễ và biện pháp khắc phục/phòng ngừa đã triển khai.\n\n"
        "Trân trọng,\nKỹ thuật/QC BT-Chem"
    )
    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="{docx_filename}"')
        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.")
