import openpyxl
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side
from openpyxl.utils import get_column_letter

wb = openpyxl.Workbook()

h1_font = Font(name='Times New Roman', bold=True, size=14, color='000000')
h2_font = Font(name='Times New Roman', bold=True, size=12, color='000000')
normal = Font(name='Times New Roman', size=10, color='000000')
bold_font = Font(name='Times New Roman', bold=True, size=10, color='000000')
note_font = Font(name='Times New Roman', italic=True, size=9, color='000000')
thin_border = Border(
    left=Side(style='thin'), right=Side(style='thin'),
    top=Side(style='thin'), bottom=Side(style='thin')
)
header_fill = PatternFill(start_color='D9E1F2', end_color='D9E1F2', fill_type='solid')

def style_header_row(ws, row, max_col):
    for c in range(1, max_col+1):
        cell = ws.cell(row=row, column=c)
        cell.font = bold_font
        cell.fill = header_fill
        cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
        cell.border = thin_border

def style_data_cell(ws, row, col, bold=False):
    cell = ws.cell(row=row, column=col)
    cell.font = bold_font if bold else normal
    cell.alignment = Alignment(vertical='top', wrap_text=True)
    cell.border = thin_border
    return cell

def auto_width(ws, min_width=10, max_width=50):
    for col_cells in ws.columns:
        length = max((len(str(c.value or '')) for c in col_cells), default=0)
        ws.column_dimensions[get_column_letter(col_cells[0].column)].width = min(max(length + 2, min_width), max_width)

# ===== SHEET 1: Tổng hợp DMSP =====
ws1 = wb.active
ws1.title = "DMSP Tổng hợp"

ws1.merge_cells('A1:F1')
c = ws1.cell(row=1, column=1, value='BÁO CÁO DANH MỤC SẢN PHẨM - KHÁCH HÀNG CAO THÀNH')
c.font = h1_font
c.alignment = Alignment(horizontal='center')

ws1.merge_cells('A2:F2')
c = ws1.cell(row=2, column=1, value='Nguồn: Tổng hợp từ 4 file (Bảng SP HKBT.xlsx, Sơn mới 0325.pdf, Chuanbilammau.docx, Danh mục sơn PU 2026.docx)')
c.font = note_font
c.alignment = Alignment(horizontal='center')

row = 4
headers = ['STT', 'Dòng sản phẩm', 'Mã sản phẩm', 'Phân loại', 'Thông tin / Đặc tính', 'Nguồn dữ liệu']
for c_idx, h in enumerate(headers, 1):
    ws1.cell(row=row, column=c_idx, value=h)
style_header_row(ws1, row, 6)

data = [
    (1, 'Sơn PU ngoài trời', 'PU HXXT', 'Bóng tự nhiên', 'TL pha: 2-0.7-1. Cứng PU HXXT, DM PU TXXT. Độ nhớt 11-15s', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (2, 'Sơn PU ngoài trời', 'PU HXXT', 'Bóng trắng', 'TL pha: 2-0.5-1. Cứng PU HXXT, DM PU TXXT. Độ nhớt 9-13s', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (3, 'Sơn PU ngoài trời', 'OD0405', 'Bóng tự nhiên', 'TL pha: 2-0.5-1. Cứng 0707B, DM PU TXXT. Chịu được môi trường biển', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (4, 'Sơn PU ngoài trời', 'OD 1107', 'Bóng tự nhiên', 'TL pha: 3-1-1.5. Cứng 0707B, DM TXXT. Chống biến màu', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (5, 'Sơn PU ngoài trời', 'Lót PU FD 0212 (SCANSIA)', 'Lót tự nhiên', 'Nhanh khô, cứng FDWS 1223, TL 3-1', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (6, 'Sơn PU ngoài trời', '0707', 'Lót tự nhiên', 'TL 4-1-2. Cứng 0707L, DM TXXT 1406 TRT. Chống ngã vàng', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (7, 'Sơn NC trong nhà', 'T2012', 'Lót/Bóng tự nhiên', 'TL 1-2 DM NC02. Giá rẻ, đơn giản', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (8, 'Sơn NC trong nhà', '1212', 'Lót/Bóng tự nhiên', 'TL 1-1 DM NC1212. Cao cấp, độ phủ cao', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (9, 'Sơn NC trong nhà', 'HB', 'Lót/Bóng tự nhiên', 'TL 1-1.5 DM NCHB. Độ phủ cao, dẻo dai, hàng giả cổ', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (10, 'Sơn NC trong nhà', 'NC HB ABR', 'Bóng tự nhiên', 'TL 1-1 DM NC HB. Chống mài mòn (chuẩn Ashley)', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (11, 'Sơn NC trong nhà', 'MOD 1106', 'Lót/Bóng tự nhiên', 'TL 10-1-10. Cứng NC MOD. Kết hợp PU+NC', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (12, 'Sơn NC trong nhà', 'NA', 'Các loại', 'TL 1-1.5 DM NCNA. Hàng nội thất trẻ em, mùi nhẹ', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (13, 'Sơn NC trong nhà', 'NY', 'Lót/Bóng tự nhiên', 'TL 1-1 DM NC02. Chậm ngã màu', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (14, 'Sơn NC trong nhà', 'NY Trắng (kháng trầy 50%)', 'Bóng trắng', 'Pha DM NCHB. Cho ray hộc tủ', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (15, 'Sơn NC trong nhà', 'PC23', 'Lót/Bóng tự nhiên', 'TL 1-1 DM NC02/23. Độ phủ cao, giá cạnh tranh', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (16, 'Sơn BUTYRATE', 'BUTYRATE ANTIUV 20%', 'Bóng tự nhiên/trắng', 'TL 1-0.5 DM BC 140717. Chống ngã vàng, sấy UV ko ngã vàng', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (17, 'Sơn PU trong nhà', 'Bóng PU 0805', 'Bóng tự nhiên', 'TL 3-1 hoặc 4-1 với cứng HXXT/0707B', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (18, 'Sơn PU trong nhà', 'Bóng PU 0805 trắng', 'Bóng trắng', 'TL 4-1 cứng HXXT hoặc 0707B', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (19, 'Sơn PU trong nhà', 'ID 0805 ABR', 'Bóng tự nhiên', 'TL 3-1-1.5. Cứng HXXT, DM TXXT. Kháng mài mòn tốt', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (20, 'Sơn PU trong nhà', 'HG', 'Bóng tự nhiên/trắng', 'TL 2-1-1.5. Cứng 0707B, DM TXXT. Cao cấp, chống bám bẩn', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (21, 'Sơn PU trong nhà', 'SM2', 'Bóng tự nhiên/trắng', 'TL 3-1-1. Cứng HXXT, DM SM. Chất lượng cao, ko cần đánh bóng', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (22, 'Sơn PU trong nhà', 'SM 3001', 'Bóng tự nhiên', 'TL 2-1-1.5 Cứng SM 3001B. Dùng cho quy trình đánh bóng', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (23, 'Sơn PU trong nhà', 'Bóng PU BTXX', 'Bóng tự nhiên', 'TL 2-1-2, độ nhớt 10-12. Ít dùng', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (24, 'Sơn nước ngoài trời', 'Bóng BT OD 02/23H', 'Bóng tự nhiên/trắng', 'Kháng nước và hóa chất', 'Bảng SP HKBT (Excel - Hệ nước)'),
    (25, 'Sơn nước ngoài trời', 'Bóng BT ODR 03/23H', 'Bóng tự nhiên/trắng', 'Đạt chuẩn Ikea R2. Chống biến màu cực tốt', 'Bảng SP HKBT (Excel - Hệ nước)'),
    (26, 'Sơn nước đa dụng', 'Bóng BEx 03-2410H', 'Bóng tự nhiên', 'Màng trong, độ phủ cao, nhanh khô', 'Bảng SP HKBT (Excel - Hệ nước)'),
    (27, 'Sơn nước đa dụng', 'Bóng BT STR-2410H', 'Bóng tự nhiên', 'Kháng hóa chất tốt (cà phê, rượu vang...)', 'Bảng SP HKBT (Excel - Hệ nước)'),
    (28, 'Sơn nước đa dụng', 'Bóng KL3-1801H', 'Bóng tự nhiên', 'Dẻo tốt, phù hợp lục bình, chống ngã màu', 'Bảng SP HKBT (Excel - Hệ nước)'),
    (29, 'Sơn nước đa dụng', 'Bóng Trắng BWEx 03-2410H', 'Bóng trắng', 'Chống ngã vàng, chống biến màu', 'Bảng SP HKBT (Excel - Hệ nước)'),
    (30, 'Sơn nước 2K', 'Bóng BT 2K 201120H', 'Bóng tự nhiên', 'Pha 10% cứng XP25H. Đạt chuẩn Ikea R2', 'Bảng SP HKBT (Excel - Hệ nước)'),
    (31, 'Sơn an toàn thực phẩm', 'BT FC 01/23 TOPCOAT', 'Bóng tự nhiên', 'Tiếp xúc trực tiếp thực phẩm ướt', 'Bảng SP HKBT (Excel - Hệ nước)'),
    (32, 'Lót nước đa dụng', 'Lót S07-2706H NEW', 'Lót tự nhiên', 'Độ trong như NC. Phù hợp giả cổ, stain màu', 'Bảng SP HKBT (Excel - Hệ nước)'),
    (33, 'Lót nước đa dụng', 'Lót Trắng SW1-1705H', 'Lót trắng', 'Chống ngã vàng, độ phủ cao. Lưu ý ko sơn dày', 'Bảng SP HKBT (Excel - Hệ nước)'),
    (34, 'Sơn UV nội thất', 'BTUV 2011 sealer PHT', 'Sealer', 'Không màu, độ nhớt thấp, giá cạnh tranh', 'Bảng SP HKBT (Excel - Hệ UV)'),
    (35, 'Sơn UV nội thất', 'BTUV 1508 primer', 'Primer', 'Tăng bám dính, bám được kim loại và nhựa', 'Bảng SP HKBT (Excel - Hệ UV)'),
    (36, 'Sơn UV nội thất', 'BTUV 2222 white sealer PHT', 'Sealer trắng', 'Lót trắng giá cạnh tranh', 'Bảng SP HKBT (Excel - Hệ UV)'),
    (37, 'Sơn UV nội thất', 'BTUV 0609 topcoat PHT', 'Topcoat', 'Chống trầy xước', 'Bảng SP HKBT (Excel - Hệ UV)'),
    (38, 'Sơn UV nội thất', 'BTUV 2407 topcoat PHT', 'Topcoat', 'Ít ngã vàng', 'Bảng SP HKBT (Excel - Hệ UV)'),
    (39, 'Sơn UV ván sàn', 'BTUV 126/127 FL sealer', 'Sealer', 'Độ cứng 8H', 'Bảng SP HKBT (Excel - Hệ UV)'),
    (40, 'Sơn UV ván sàn', 'BTUV 0510 Topcoat', 'Topcoat', 'Chống trầy xước, chống mài mòn', 'Bảng SP HKBT (Excel - Hệ UV)'),
    (41, 'Sơn UV phun', 'BTUV 2105 V sealer', 'Sealer', 'Phun chân không, sơn cạnh MDF', 'Bảng SP HKBT (Excel - Hệ UV)'),
    (42, 'Sơn UV bóng sáng', 'BTUV 1710 Topcoat', 'Topcoat', 'Tự san phẳng, kháng hóa chất, bóng gương, độ cứng 4-5H', 'Bảng SP HKBT (Excel - Hệ UV)'),
    (43, 'Sơn UV ngoại thất', 'BTUV 2403 Outdoor M', 'Topcoat', 'Chống ngã vàng cho hàng ngoài trời', 'Bảng SP HKBT (Excel - Hệ UV)'),
    (44, 'Sơn mới 0325', 'PU-HXXT (PDF)', 'Bóng 2K PU', 'Bền thời tiết, kháng nước & dung môi', 'Sơn mới 0325 (PDF)'),
    (45, 'Sơn mới 0325', 'Bóng BT OD 02/23H (PDF)', 'Bóng nước 1K', 'Thân thiện MT, chịu thời tiết tốt', 'Sơn mới 0325 (PDF)'),
    (46, 'Sơn mới 0325', 'NC HB ABR (PDF)', 'Bóng NC', 'Kháng trầy, kháng hóa chất. TL 1-1 DM NC HB', 'Sơn mới 0325 (PDF)'),
    (47, 'Sơn mới 0325', 'NC NY 1807 (PDF)', 'Bóng NC', 'Chống ngã vàng. TL 1-1 DM NC02', 'Sơn mới 0325 (PDF)'),
    (48, 'Sơn mới 0325', 'PRECAT BT 0124 (PDF)', 'Bóng 1K', 'Kháng hóa chất, nhanh khô. TL 1-1 DM BT CAT', 'Sơn mới 0325 (PDF)'),
    (49, 'Sơn mới 0325', 'B07 NY 1024H (PDF)', 'Bóng nước 1K', 'Chống ngã vàng, thân thiện MT', 'Sơn mới 0325 (PDF)'),
    (50, 'Sơn mới 0325', 'Bóng BT ABR 2410H (PDF)', 'Bóng nước 1K', 'Độ cứng cao, kháng trầy', 'Sơn mới 0325 (PDF)'),
    (51, 'Sơn mới 0325', 'BEX03 2402H BC (PDF)', 'Bóng nước 1K', 'Better carbon 15%, bám tốt trên MDF', 'Sơn mới 0325 (PDF)'),
    (52, 'Sơn mới 0325', 'PU OD 0405 (PDF)', 'Bóng 2K PU', 'Kháng nước, chịu thời tiết cao', 'Sơn mới 0325 (PDF)'),
    (53, 'Lót PU', 'Lót PU FD 0212', 'Lót tự nhiên', 'TL 4:1:3 (Lót + Cứng FD 0212L + DM)', 'Chuanbilammau.docx'),
    (54, 'Lót PU trắng', 'Lót PU FD 2106 TRẮNG', 'Lót trắng', 'TL 4:1:3 (Lót + Cứng FD 0212L/FD 2106L + DM)', 'Chuanbilammau.docx'),
    (55, 'Bóng PU', 'Bóng PU OD 0408 5% & 70%', 'Bóng trong', 'TL 4:1:2 (Bóng + Cứng 0707B + DM)', 'Chuanbilammau.docx'),
    (56, 'Lót PU thường', 'Lót PU thông thường', 'Lót', 'TL 2:1:2 (Lót + Cứng PU + DM TXXT)', 'Danh mục sơn PU 2026.docx'),
    (57, 'Lót PU trắng', 'Lót PU trắng', 'Lót trắng', 'TL 2:1:2 (Lót + Cứng PU + DM TXT)', 'Danh mục sơn PU 2026.docx'),
    (58, 'Bóng PU', 'Bóng PU 0805 (trong suốt)', 'Bóng trong', 'TL 4:1:2.5 (Bóng + Cứng 0707B + DM TXXT)', 'Danh mục sơn PU 2026.docx'),
    (59, 'Bóng PU', 'Bóng PU 0805 trắng (bóng 20-30)', 'Bóng trắng', 'TL 4:1:2 (Bóng + Cứng 0707B + DM TXXT)', 'Danh mục sơn PU 2026.docx'),
    (60, 'Dầu bảo quản', 'OBT 01', 'Dầu', 'Dùng trực tiếp, ĐN 7-8.5s. Làm bề mặt gỗ', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (61, 'Dầu bảo quản', 'OBT 01/24 M', 'Dầu lau ẩm', 'Lau lên bề mặt PU ngoài trời', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (62, 'Stain hệ dầu', 'Stain SP3010', 'Stain', '+20% phụ gia SP2. Tạo màu gỗ trước lau dầu', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (63, 'Sơn AC', 'AC tự nhiên/trắng', 'Lót/Bóng', 'TL 10-1-3 (lót) hoặc 10-0.5-1 (bóng). Cứng AC 1AN', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (64, 'Tannin Block', 'Primer TBS 251223 New', 'Primer', 'TL 1 Primer : 4 phụ gia. Ngăn dầu gỗ thông', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
    (65, 'Tannin Block', 'Chất TB1501', 'TB', 'Dùng trực tiếp. Ngăn dầu trên mắt gỗ thông', 'Bảng SP HKBT (Excel - Hệ Dung môi)'),
]

for i, d in enumerate(data):
    r = row + 1 + i
    for c_idx, v in enumerate(d, 1):
        style_data_cell(ws1, r, c_idx).value = v

auto_width(ws1)
ws1.column_dimensions['A'].width = 6
ws1.column_dimensions['B'].width = 26
ws1.column_dimensions['C'].width = 30
ws1.column_dimensions['D'].width = 20
ws1.column_dimensions['E'].width = 55
ws1.column_dimensions['F'].width = 32

# ===== SHEET 2: Dầu & Phụ gia =====
ws2 = wb.create_sheet("Dầu - Phụ gia - Tannin")
row = 1
ws2.merge_cells('A1:D1')
ws2.cell(row=1, column=1, value='DẦU BẢO QUẢN, PHỤ GIA & TANNIN BLOCK').font = h1_font

row = 3
for c_idx, h in enumerate(['STT', 'Loại', 'Sản phẩm', 'Thông tin'], 1):
    ws2.cell(row=row, column=c_idx, value=h)
style_header_row(ws2, row, 4)

sub_data = [
    (1, 'Dầu bảo quản', 'OBT 01', 'Dùng trực tiếp. Độ nhớt NK2: 7-8.5s. Làm bề mặt gỗ tăng cảm giác cao cấp'),
    (2, 'Dầu bảo quản', 'OBT 01/24 M', 'Lau lên bề mặt sơn PU ngoài trời. Ẩm, mờ, bảo vệ bề mặt'),
    (3, 'Dầu bảo quản', 'OBT 04/24', 'Nhúng, lau. Nhanh khô. Đồ chơi trẻ em (Minh Phát)'),
    (4, 'Dầu bảo quản', 'OBT OD 0124/2K', 'Nhúng 2 lần. Có pha phụ gia SP3. Đánh bóng bề mặt'),
    (5, 'Dầu bảo quản', 'OBT01N 2509/17', 'Dùng trực tiếp. Chống ẩm ướt, rêu, nấm mốc'),
    (6, 'Stain hệ dầu bảo quản', 'Stain SP3010', '+20% phụ gia SP2. Tạo màu sắc bề mặt gỗ trước lau dầu'),
    (7, 'Phụ gia hệ dầu', 'Phụ gia SP2', 'Tăng cường độ bền và tính bảo vệ cho hàng dầu bảo quản'),
    (8, 'Tannin Block', 'Primer TBS 251223 New', 'TL 1 Primer : 4 phụ gia. Ngăn dầu cho gỗ thông'),
    (9, 'Tannin Block', 'Chất TB1501', 'Dùng trực tiếp. Ngăn dầu trên mắt gỗ'),
]

for i, d in enumerate(sub_data):
    r = row + 1 + i
    for c_idx, v in enumerate(d, 1):
        style_data_cell(ws2, r, c_idx).value = v

auto_width(ws2)

# ===== SHEET 3: Màu sắc =====
ws3 = wb.create_sheet("Màu sắc & Tinh màu")
row = 1
ws3.merge_cells('A1:E1')
ws3.cell(row=1, column=1, value='DANH MỤC MÀU SẮC & TINH MÀU').font = h1_font

row = 3
for c_idx, h in enumerate(['STT', 'Màu', 'Mã số', 'Loại', 'Công dụng / Ghi chú'], 1):
    ws3.cell(row=row, column=c_idx, value=h)
style_header_row(ws3, row, 5)

colors = [
    (1, 'Vàng', 'Vàng Y57', 'Dye', 'Pad Stain. Màu nền, dễ bay màu'),
    (2, 'Đỏ', 'Đỏ R95', 'Dye', 'Pad Stain. Màu nền, dễ bay màu'),
    (3, 'Đen', 'Đen B51', 'Dye', 'Pad Stain. Màu nền, dễ bay màu'),
    (4, 'Vàng', 'Vàng 412', 'Dye', 'Stain'),
    (5, 'Vàng', 'Vàng cam 210K', 'Dye', 'Stain. Màu giá cao'),
    (6, 'Vàng', 'Vàng BT', 'Dye', 'Stain. Màu giá cao'),
    (7, 'Đỏ', 'Đỏ VM 334', 'Dye', 'Stain'),
    (8, 'Đỏ', 'Đỏ BT', 'Dye', 'Stain. Màu giá cao'),
    (9, 'Xanh lá', 'Xanh lá GT', 'Dye', 'Stain'),
    (10, 'Xanh dương', 'Xanh dương 4GA', 'Dye', 'Stain'),
    (11, 'Nâu', 'Nâu BS 1008 (1-1)DM', 'Nghiền', 'Stain'),
    (12, 'Trắng', 'Stain NC trắng', 'Nghiền', 'Stain'),
    (13, 'Trắng', 'Stain K25 trắng', 'Nghiền', 'Stain'),
    (14, 'Vàng', 'Vàng 2RA', 'Pigment', 'Sơn màu. Màu đắt tiền'),
    (15, 'Vàng', 'Vàng YS618 (1-1)DM', 'Pigment', 'Đa dụng (lót màu, sơn màu)'),
    (16, 'Đỏ', 'Đỏ super (1-2)DM', 'Pigment', 'Sơn màu. Màu đắt tiền'),
    (17, 'Đen', 'Đen BT M100S(1-0.5)DM', 'Pigment', 'Đa dụng. Tối đa 5% trong sơn đặc'),
    (18, 'Đen', 'Đen TCL3 (1-2)DM', 'Pigment', 'Đa dụng. Tối đa 5% trong sơn đặc'),
    (19, 'Trắng', 'Paste 59 trắng', 'Pigment', 'Sơn màu PU. Tối đa 20%'),
    (20, 'Vàng', 'Vàng YP618 (1-1) PE', 'Pigment', 'Dầu màu ngoài trời'),
    (21, 'Đen', 'Đen PB 1012 (1-2) PE', 'Pigment', 'Dầu màu ngoài trời'),
    (22, 'Nâu', 'Nâu BU 5511 (1-1) PE', 'Pigment', 'Dầu màu ngoài trời'),
]

for i, d in enumerate(colors):
    r = row + 1 + i
    for c_idx, v in enumerate(d, 1):
        style_data_cell(ws3, r, c_idx).value = v

auto_width(ws3)

# ===== SHEET 4: Chất cứng & Dung môi =====
ws4 = wb.create_sheet("Chất cứng & Dung môi")
row = 1
ws4.merge_cells('A1:D1')
ws4.cell(row=1, column=1, value='CHẤT CỨNG & DUNG MÔI KHUYẾN NGHỊ').font = h1_font

row = 3
ws4.cell(row=row, column=1, value='CHẤT CỨNG (CHẤT ĐÓNG RẮN)').font = h2_font
ws4.merge_cells(start_row=row, start_column=1, end_row=row, end_column=4)
row += 1

for c_idx, h in enumerate(['STT', 'Sản phẩm', 'Mã số', 'Sử dụng cho'], 1):
    ws4.cell(row=row, column=c_idx, value=h)
style_header_row(ws4, row, 4)

cungs = [
    (1, 'Cứng PU Thường', 'Cứng PU', 'Lót PU thường & Lót PU trắng'),
    (2, 'Cứng PU cho bóng', 'Cứng PU 0707B', 'Bóng PU 0805 trắng & trong suốt'),
    (3, 'Cứng cho Lót FD', 'Cứng FD 0212L (= FD 2106L)', 'Lót FD 0212 / FD 2106 Trắng'),
    (4, 'Cứng PU HXXT', 'Cứng PU HXXT', 'PU HXXT, Bóng PU 0805, SM2'),
    (5, 'Cứng PU SM 3001B', 'Cứng SM 3001B', 'Bóng SM 3001'),
    (6, 'Cứng NC MOD', 'Cứng NC MOD 1106', 'Sơn NC MOD 1106'),
    (7, 'Cứng AC 1AN', 'Cứng AC 1AN', 'Sơn AC'),
    (8, 'Cứng XP25H', 'Cứng XP25H', 'Sơn nước BT 2K 201120H'),
]

for i, d in enumerate(cungs):
    r = row + 1 + i
    for c_idx, v in enumerate(d, 1):
        style_data_cell(ws4, r, c_idx).value = v

row = row + len(cungs) + 2
ws4.cell(row=row, column=1, value='DUNG MÔI').font = h2_font
ws4.merge_cells(start_row=row, start_column=1, end_row=row, end_column=4)
row += 1

for c_idx, h in enumerate(['STT', 'Loại', 'Mã số', 'Sử dụng cho'], 1):
    ws4.cell(row=row, column=c_idx, value=h)
style_header_row(ws4, row, 4)

dms = [
    (1, 'DM PU TXXT', 'DM TXXT', 'Pha Bóng PU 0805, Lót PU thường, Bóng trắng 0805'),
    (2, 'DM PU Lót', 'DM PU Lót', 'Pha Lót PU trắng, Lót PU 0601 trắng'),
    (3, 'DM NC02', 'DM NC02', 'Sơn NC (T2012, PC23, NY...)'),
    (4, 'DM NCHB', 'DM NCHB', 'Sơn NC HB, NC NY'),
    (5, 'DM PU SM', 'DM PU SM', 'Sơn SM2, SM 3001 (đánh bóng)'),
    (6, 'DM NC MOD', 'DM NC MOD', 'Sơn NC MOD 1106'),
    (7, 'DM AC', 'DM AC', 'Sơn AC'),
    (8, 'DM BC 140717', 'DM BC 140717', 'Sơn BUTYRATE'),
    (9, 'DM NC1212', 'DM NC1212', 'Sơn NC 1212'),
    (10, 'DM Glaze', 'DM Pegasol', 'Pha loãng Glaze PU'),
    (11, 'DM PU TXXT 1406 TRT', 'DM TXXT 1406 TRT', 'OD0405, 0707 ngoài trời'),
    (12, 'DM BT CAT', 'DM BT CAT', 'PRECAT BT 0124'),
]

for i, d in enumerate(dms):
    r = row + 1 + i
    for c_idx, v in enumerate(d, 1):
        style_data_cell(ws4, r, c_idx).value = v

auto_width(ws4)

# SAVE
output_path = 'Bao_Cao_DMSP_Cao_Thanh_2026.xlsx'
wb.save(output_path)
print(f'Đã lưu: {output_path}')
