from __future__ import annotations

from app.common.excel_styler import (
    ALIGN_CENTER,
    ALIGN_LEFT,
    ALIGN_RIGHT,
    BORDER_BOX,
    FILL_HEADER,
    FMT_CURRENCY_VND,
    FONT_DATA,
    FONT_HEADER,
    FONT_MONO,
    FONT_SUBTITLE,
    FONT_TITLE,
)


def build_market_prices_sheet(ws2):
    ws2.title = "Giá Vật Tư & Nhân Công 2026"
    ws2.views.sheetView[0].showGridLines = True

    ws2.merge_cells("A1:G1")
    ws2["A1"] = (
        "BẢNG ĐƠN GIÁ VẬT TƯ, NHÂN CÔNG & CA MÁY CHUẨN ĐỊNH SƠN (HẢI PHÒNG 2026)"
    )
    ws2["A1"].font = FONT_TITLE
    ws2["A1"].alignment = ALIGN_CENTER

    ws2.merge_cells("A2:G2")
    ws2["A2"] = (
        "Căn cứ Thông báo giá Liên Sở Xây Dựng Hải Phòng & Công bố giá thị trường thực tế Cty Định Sơn"
    )
    ws2["A2"].font = FONT_SUBTITLE
    ws2["A2"].alignment = ALIGN_CENTER

    p_headers = [
        ("A4", "STT"),
        ("B4", "Mã Hiệu"),
        ("C4", "Tên Vật Tư / Ca Máy / Nhân Công"),
        ("D4", "Quy Cách / Tiêu Chuẩn"),
        ("E4", "ĐVT"),
        ("F4", "Đơn Giá Vùng II (VNĐ)"),
        ("G4", "Ghi Chú Nguồn Dữ Liệu"),
    ]
    for cell_ref, text in p_headers:
        ws2[cell_ref] = text
        ws2[cell_ref].font = FONT_HEADER
        ws2[cell_ref].fill = FILL_HEADER
        ws2[cell_ref].alignment = ALIGN_CENTER
        ws2[cell_ref].border = BORDER_BOX
    ws2.row_dimensions[4].height = 26

    market_data = [
        (
            "VT-CAT-01",
            "Cát vàng hạt lớn bê tông",
            "Mô đun độ lớn Mk >= 2.0 (Chuẩn HP 2026)",
            "m3",
            710000,
            "Thông báo giá Sở XD Hải Phòng Vùng II",
        ),
        (
            "VT-CAT-02",
            "Cát vàng xây trát",
            "Hạt trung bình trát tường / ốp lát",
            "m3",
            510000,
            "Thông báo giá Sở XD Hải Phòng Vùng II",
        ),
        (
            "VT-CAT-03",
            "Cát đen san nền",
            "Độ sạch tạp chất <= 5%",
            "m3",
            215000,
            "Thông báo giá Sở XD Hải Phòng Vùng II",
        ),
        (
            "VT-THEP-01",
            "Thép cuộn D10 Hòa Phát CB300-V",
            "TCVN 1651-2:2018",
            "kg",
            16800,
            "Báo giá đại lý cấp 1 Hòa Phát",
        ),
        (
            "VT-THEP-02",
            "Thép thanh vằn D16-D25 CB400-V",
            "TCVN 1651-2:2018",
            "kg",
            17200,
            "Báo giá đại lý cấp 1 Hòa Phát",
        ),
        (
            "VT-BT-01",
            "Bê tông thương phẩm M300 R28",
            "Độ sụt 12±2 cm, Xi măng PCB40 Hải Phòng",
            "m3",
            1180000,
            "Trạm trộn bê tông Phúc Sơn / Nam Sơn",
        ),
        (
            "VT-BT-02",
            "Bê tông lót móng M100",
            "Đá 4x6, Xi măng PCB30",
            "m3",
            850000,
            "Định mức sản xuất tại chỗ",
        ),
        (
            "CM-DAO-01",
            "Ca máy đào bánh xích 0.8 m3",
            "Kobelco SK200 / Komatsu PC200",
            "ca",
            3800000,
            "Bảng giá ca máy Định Sơn 2026",
        ),
        (
            "CM-UI-01",
            "Ca máy ủi 110 CV",
            "Komatsu D31P",
            "ca",
            2900000,
            "Bảng giá ca máy Định Sơn 2026",
        ),
        (
            "NC-XD-01",
            "Nhân công xây dựng bậc 3.5/7",
            "Nhóm II Vùng II Hải Phòng (Nghị định 2026)",
            "công",
            345000,
            "Công bố đơn giá nhân công Sở XD Hải Phòng",
        ),
    ]

    p_row = 5
    for idx, (code, name, spec, unit, price, note) in enumerate(market_data, 1):
        ws2[f"A{p_row}"] = idx
        ws2[f"B{p_row}"] = code
        ws2[f"C{p_row}"] = name
        ws2[f"D{p_row}"] = spec
        ws2[f"E{p_row}"] = unit
        ws2[f"F{p_row}"] = price
        ws2[f"G{p_row}"] = note

        ws2[f"A{p_row}"].font = FONT_DATA
        ws2[f"A{p_row}"].alignment = ALIGN_CENTER
        ws2[f"A{p_row}"].border = BORDER_BOX

        ws2[f"B{p_row}"].font = FONT_MONO
        ws2[f"B{p_row}"].alignment = ALIGN_CENTER
        ws2[f"B{p_row}"].border = BORDER_BOX

        ws2[f"C{p_row}"].font = FONT_DATA
        ws2[f"C{p_row}"].alignment = ALIGN_LEFT
        ws2[f"C{p_row}"].border = BORDER_BOX

        ws2[f"D{p_row}"].font = FONT_DATA
        ws2[f"D{p_row}"].alignment = ALIGN_LEFT
        ws2[f"D{p_row}"].border = BORDER_BOX

        ws2[f"E{p_row}"].font = FONT_DATA
        ws2[f"E{p_row}"].alignment = ALIGN_CENTER
        ws2[f"E{p_row}"].border = BORDER_BOX

        ws2[f"F{p_row}"].font = FONT_MONO
        ws2[f"F{p_row}"].alignment = ALIGN_RIGHT
        ws2[f"F{p_row}"].number_format = FMT_CURRENCY_VND
        ws2[f"F{p_row}"].border = BORDER_BOX

        ws2[f"G{p_row}"].font = FONT_DATA
        ws2[f"G{p_row}"].alignment = ALIGN_LEFT
        ws2[f"G{p_row}"].border = BORDER_BOX

        ws2.row_dimensions[p_row].height = 20
        p_row += 1

    p_col_widths = {"A": 6, "B": 16, "C": 35, "D": 38, "E": 8, "F": 22, "G": 40}
    for col_letter, width in p_col_widths.items():
        ws2.column_dimensions[col_letter].width = width
