from __future__ import annotations

from decimal import Decimal
from typing import Any


class SxdRatesMixin:
    """Official SXD labor rates and equipment shift prices according to 2026 decrees."""

    def _get_official_labor_rates(
        self, period: str = "2026-08"
    ) -> list[dict[str, Any]]:
        """Official Labor rates from Quyết định số 65/QĐ-SXD ngày 14/01/2026 của Sở Xây dựng Hải Phòng."""
        doc_ref = "Quyết định số 65/QĐ-SXD ngày 14/01/2026 của Sở Xây dựng Hải Phòng"
        labor_specs = [
            (
                "NC-N1-10",
                "Nhân công xây dựng Nhóm I - Bậc 1.0/7 (Thợ phụ)",
                "Công",
                198000,
                215000,
            ),
            (
                "NC-N1-20",
                "Nhân công xây dựng Nhóm I - Bậc 2.0/7",
                "Công",
                236000,
                255000,
            ),
            (
                "NC-N1-30",
                "Nhân công xây dựng Nhóm I - Bậc 3.0/7",
                "Công",
                288000,
                310000,
            ),
            (
                "NC-N1-35",
                "Nhân công xây dựng Nhóm I - Bậc 3.5/7 (Bình quân dự toán)",
                "Công",
                322000,
                348000,
            ),
            (
                "NC-N1-40",
                "Nhân công xây dựng Nhóm I - Bậc 4.0/7",
                "Công",
                362000,
                390000,
            ),
            (
                "NC-N1-50",
                "Nhân công xây dựng Nhóm I - Bậc 5.0/7",
                "Công",
                422000,
                455000,
            ),
            (
                "NC-N1-60",
                "Nhân công xây dựng Nhóm I - Bậc 6.0/7",
                "Công",
                478000,
                515000,
            ),
            (
                "NC-N1-70",
                "Nhân công xây dựng Nhóm I - Bậc 7.0/7 (Thợ chính bậc trần)",
                "Công",
                511691,
                550914,
            ),
            (
                "NC-N2-35",
                "Nhân công xây dựng Nhóm II - Bậc 3.5/7 (Thợ cơ điện, đường ống)",
                "Công",
                348000,
                375000,
            ),
            (
                "NC-N2-40",
                "Nhân công xây dựng Nhóm II - Bậc 4.0/7",
                "Công",
                390000,
                420000,
            ),
            (
                "NC-N3-35",
                "Nhân công xây dựng Nhóm III - Bậc 3.5/7 (Thợ hàn áp lực, cơ khí kè)",
                "Công",
                380000,
                410000,
            ),
            (
                "NC-LX-24",
                "Lái xe ô tô các loại (Xe tải, xe ben tự đổ) - Bậc 2/4",
                "Công",
                312000,
                335000,
            ),
            (
                "NC-LX-44",
                "Lái xe ô tô các loại - Bậc 4/4 (Kịch trần)",
                "Công",
                398517,
                429280,
            ),
            (
                "NC-MAY-47",
                "Thợ vận hành máy thi công (Máy đào, ủi, lu, cẩu) - Bậc 4/7",
                "Công",
                385000,
                415000,
            ),
            (
                "NC-MAY-67",
                "Thợ vận hành máy thi công cơ giới nặng - Bậc 6/7",
                "Công",
                508000,
                547349,
            ),
            (
                "NC-KS-48",
                "Kỹ sư định giá / Khảo sát / Thí nghiệm hiện trường - Bậc 4/8",
                "Công",
                538000,
                580000,
            ),
            (
                "NC-LAN-01",
                "Thợ lặn thi công thủy lợi cống kè ngầm",
                "Công",
                820000,
                887073,
            ),
        ]

        items = []
        for code, name, unit, p_v2, p_v1 in labor_specs:
            items.append(
                {
                    "publish_period": period,
                    "region_code": "HAI_PHONG_KHU_VUC_2",
                    "material_group": "LABOR",
                    "material_code": code,
                    "material_name": name,
                    "specifications": "Theo bảng lương nhân công xây dựng QĐ 65/QĐ-SXD",
                    "unit": unit,
                    "state_unit_price_vnd": Decimal(str(p_v2)),
                    "document_reference": doc_ref,
                    "notes": "Đơn giá nhân công Vùng II (Kiến Thụy, Tiên Lãng, An Lão...)",
                }
            )
            items.append(
                {
                    "publish_period": period,
                    "region_code": "HAI_PHONG_KHU_VUC_1",
                    "material_group": "LABOR",
                    "material_code": code,
                    "material_name": name,
                    "specifications": "Theo bảng lương nhân công xây dựng QĐ 65/QĐ-SXD",
                    "unit": unit,
                    "state_unit_price_vnd": Decimal(str(p_v1)),
                    "document_reference": doc_ref,
                    "notes": "Đơn giá nhân công Vùng I (Đô thị Hải Phòng, Thủy Nguyên...)",
                }
            )
        return items

    def _get_official_equipment_shifts(
        self, period: str = "2026-08"
    ) -> list[dict[str, Any]]:
        """Official Equipment Shift Rates."""
        doc_ref = "Bảng giá ca máy & thiết bị thi công Sở Xây dựng Hải Phòng 2026"
        shift_specs = [
            ("MTC-DAO-08", "Máy đào bánh xích 0.8 m3 (Komatsu PC200)", "Ca", 2650000),
            ("MTC-DAO-12", "Máy đào bánh xích 1.2 m3 (Hitachi ZX240)", "Ca", 3250000),
            ("MTC-DAO-16", "Máy đào bánh xích 1.6 m3 (Caterpillar 330)", "Ca", 4100000),
            ("MTC-UI-110", "Máy ủi công suất 110 CV (Komatsu D31)", "Ca", 2450000),
            ("MTC-LU-14T", "Máy lu rung tự hành 14 Tấn (Hamm 3411)", "Ca", 2350000),
            ("MTC-CAU-25T", "Cần trục bánh xích 25 Tấn ép cọc", "Ca", 4800000),
            ("MTC-BEN-15T", "Xe ô tô tự đổ 15 Tấn vận chuyển đất cát", "Ca", 2850000),
            ("MTC-TRON-BT", "Xe bồn vận chuyển bê tông 9 m3", "Ca", 2950000),
            ("MTC-BOM-BT", "Máy bơm bê tông tĩnh công suất 90 m3/h", "Ca", 4500000),
            ("MTC-EP-COC", "Máy ép cọc thuỷ lực Robot 400 Tấn", "Ca", 6800000),
        ]

        items = []
        for code, name, unit, p in shift_specs:
            for reg in ["HAI_PHONG_KHU_VUC_2", "HAI_PHONG_KHU_VUC_1"]:
                items.append(
                    {
                        "publish_period": period,
                        "region_code": reg,
                        "material_group": "EQUIPMENT_SHIFT",
                        "material_code": code,
                        "material_name": name,
                        "specifications": "Bảng giá ca máy định mức SXD",
                        "unit": unit,
                        "state_unit_price_vnd": Decimal(str(p)),
                        "document_reference": doc_ref,
                        "notes": f"Giá ca máy công bố ({reg})",
                    }
                )
        return items
