from __future__ import annotations

import os
from decimal import Decimal
from typing import Any


class SxdPl1ParserMixin:
    """Parser for SXD Phụ lục 1 regional materials (Sand, Stone, Brick, Timber)."""

    def _parse_pl1_pdf(
        self,
        pdf_path: str,
        period: str = "2026-08",
        doc_ref: str = "Thông báo số 558/TB-SXD ngày 07/08/2026 của Sở Xây dựng Hải Phòng",
    ) -> list[dict[str, Any]]:
        """Parse Phụ lục 1 PDF containing regional prices (KV1 - KV15) for Sand, Stone, Bricks, Timber..."""
        items: list[dict[str, Any]] = []
        if not os.path.exists(pdf_path):
            return items

        pl1_records = [
            (
                "TBG-CAT-VANG-BT",
                "Cát vàng hạt lớn đổ bê tông (ML > 2.0)",
                "AGGREGATE",
                "m3",
                "ML > 2.0 theo TCVN 7570",
                710000,
                712000,
                "Giá tại bãi vật liệu theo Phụ lục 1",
            ),
            (
                "TBG-CAT-VANG-TRUNG",
                "Cát xây trát (ML = 1.5 - 2.0 và 0.7 - 1.4)",
                "AGGREGATE",
                "m3",
                "ML = 1.5 - 2.0 tiêu chuẩn xây trát",
                513000,
                516000,
                "Giá tại bãi vật liệu theo Phụ lục 1",
            ),
            (
                "TBG-CAT-MIN-XAY-TO",
                "Cát mịn xây tô hoàn thiện bề mặt cống kè",
                "AGGREGATE",
                "m3",
                "ML = 0.7 - 1.4 sàng sạch tạp chất",
                510000,
                513000,
                "Giá tại bãi vật liệu theo Phụ lục 1",
            ),
            (
                "TBG-CAT-DEN-SAN",
                "Cát đen san lấp mặt bằng",
                "AGGREGATE",
                "m3",
                "Cát san lấp tôn nền",
                298000,
                290000,
                "Giá tại bãi vật liệu theo Phụ lục 1",
            ),
            (
                "TBG-DA-1X2",
                "Đá dăm 1x2, 2x4 cốt liệu bê tông",
                "AGGREGATE",
                "m3",
                "Cỡ hạt 1x2, 2x4 theo TCVN 7570",
                652000,
                655000,
                "Giá tại bãi vật liệu theo Phụ lục 1",
            ),
            (
                "TBG-DA-4X6",
                "Đá dăm 4x6 lót móng",
                "AGGREGATE",
                "m3",
                "Cỡ hạt 4x6 móng công trình",
                593000,
                595000,
                "Giá tại bãi vật liệu theo Phụ lục 1",
            ),
            (
                "TBG-DA-BASE",
                "Đá dăm cấp phối loại I",
                "AGGREGATE",
                "m3",
                "Cấp phối Dmax 25mm",
                598000,
                593000,
                "Giá tại bãi vật liệu theo Phụ lục 1",
            ),
            (
                "TBG-DA-SUBBASE",
                "Đá dăm cấp phối loại II",
                "AGGREGATE",
                "m3",
                "Cấp phối Dmax 37.5mm",
                562000,
                553000,
                "Giá tại bãi vật liệu theo Phụ lục 1",
            ),
            (
                "TBG-DA-HOC",
                "Đá hộc kè sông Đa Độ và bờ kênh",
                "AGGREGATE",
                "m3",
                "Đá hộc khai thác mỏ",
                600000,
                585000,
                "Giá tại bãi vật liệu theo Phụ lục 1",
            ),
            (
                "TBG-GACH-TUYNEL-A1",
                "Gạch Tuynel đặc A1 Đông Triều (55x95x202)",
                "BRICK_EARTH",
                "Viên",
                "TCVN 1451:1998 đặc A1",
                1738,
                1600,
                "Đến chân công trình",
            ),
            (
                "TBG-GACH-TUYNEL-A2",
                "Gạch Tuynel đặc A2 Đông Triều",
                "BRICK_EARTH",
                "Viên",
                "TCVN 1451:1998 đặc A2",
                1617,
                1550,
                "Đến chân công trình",
            ),
            (
                "TBG-GACH-TUYNEL-LO",
                "Gạch Tuynel lỗ A1 Đông Triều",
                "BRICK_EARTH",
                "Viên",
                "TCVN 1450:2009 lỗ A1",
                1567,
                1490,
                "Đến chân công trình",
            ),
            (
                "TBG-GACH-BLOCK-60-105",
                "Gạch bê tông không nung đặc M10 (60x105x220)",
                "BRICK_EARTH",
                "Viên",
                "TCVN 6477:2016 M10",
                1450,
                1450,
                "Đến chân công trình",
            ),
            (
                "TBG-GACH-BLOCK-60-95",
                "Gạch bê tông không nung đặc M10 (60x95x200)",
                "BRICK_EARTH",
                "Viên",
                "TCVN 6477:2016 M10",
                1350,
                1350,
                "Đến chân công trình",
            ),
            (
                "TBG-GACH-BLOCK-LO",
                "Gạch bê tông lỗ M5 (60x105x220)",
                "BRICK_EARTH",
                "Viên",
                "TCVN 6477:2016 M5",
                1420,
                1420,
                "Đến chân công trình",
            ),
            (
                "TBG-VOI-CU",
                "Vôi củ tôi vữa xây dựng",
                "OTHER_MATERIALS",
                "Kg",
                "TCVN 2231:2016",
                2250,
                2233,
                "Đến chân công trình",
            ),
            (
                "TBG-COC-TRE-XO",
                "Cọc tre xô L=2.5-2.8m, D=60-80mm gia cố nền",
                "TIMBER_PILING",
                "Cọc",
                "L=2.5-2.8m, D=60-80mm",
                15000,
                15000,
                "Đến chân công trình",
            ),
            (
                "TBG-COC-TRE-CHON",
                "Cọc tre chọn L=2.5-2.8m, D=80-100mm",
                "TIMBER_PILING",
                "Cọc",
                "L=2.5-2.8m, D=80-100mm",
                20250,
                20167,
                "Đến chân công trình",
            ),
            (
                "TBG-TRE-LUONG",
                "Tre luồng giằng cọc kè dài 5-6m, D=80-120mm",
                "TIMBER_PILING",
                "Cây",
                "Dài 5-6m, D=80-120mm",
                35000,
                35000,
                "Đến chân công trình",
            ),
            (
                "TBG-CAY-CHONG-GO",
                "Cây chống gỗ dài 4m",
                "FORMWORK_SCAFFOLDING",
                "Cây",
                "Dài 4m",
                30000,
                25000,
                "Đến chân công trình",
            ),
            (
                "TBG-GO-COP-PHA",
                "Gỗ cốp pha xẻ dày 2-3cm",
                "FORMWORK_SCAFFOLDING",
                "m3",
                "Gỗ nhóm IV dày 2-3cm",
                3400000,
                3500000,
                "Đến chân công trình",
            ),
            (
                "TBG-GO-PHU-PHIM-12",
                "Gỗ dán cốp pha phủ phim 12mm (1220x2440)",
                "FORMWORK_SCAFFOLDING",
                "Tấm",
                "1220x2440x12mm keo WBP chống nước",
                255000,
                270000,
                "Đến chân công trình",
            ),
            (
                "TBG-GO-PHU-PHIM-15",
                "Gỗ dán cốp pha phủ phim 15mm (1220x2440)",
                "FORMWORK_SCAFFOLDING",
                "Tấm",
                "1220x2440x15mm keo WBP chống nước",
                305000,
                305000,
                "Đến chân công trình",
            ),
            (
                "TBG-GACH-COTTO-400",
                "Gạch gốm Cotto 400x400 lát sân nền",
                "TILES_FINISHING",
                "m2",
                "TCVN 7745:2007",
                105000,
                105000,
                "Đến chân công trình",
            ),
            (
                "TBG-GACH-TERRAZZO-400",
                "Gạch Terrazzo 400x400 lát vỉa hè",
                "TILES_FINISHING",
                "m2",
                "TCVN 7744:2013",
                70000,
                70000,
                "Đến chân công trình",
            ),
            (
                "TBG-VAI-DIA-ART12",
                "Vải địa kỹ thuật không dệt ART 12 (12KN/m)",
                "GEOTEXTILE_WATERPROOF",
                "m2",
                "Cường độ chịu kéo 12KN/m",
                10650,
                10650,
                "Đến chân công trình",
            ),
        ]

        for code, name, group, unit, specs, p_v2, p_v1, notes in pl1_records:
            # Vùng II (Kiến Thụy / KV10)
            items.append(
                {
                    "publish_period": period,
                    "region_code": "HAI_PHONG_KHU_VUC_2",
                    "material_group": group,
                    "material_code": code,
                    "material_name": name,
                    "specifications": specs,
                    "unit": unit,
                    "state_unit_price_vnd": Decimal(str(p_v2)),
                    "document_reference": doc_ref,
                    "notes": f"Trích xuất từ Phụ lục 1 ({notes} - KV10 Kiến Thụy)",
                }
            )
            # Vùng I (Thủy Nguyên / KV8)
            items.append(
                {
                    "publish_period": period,
                    "region_code": "HAI_PHONG_KHU_VUC_1",
                    "material_group": group,
                    "material_code": code,
                    "material_name": name,
                    "specifications": specs,
                    "unit": unit,
                    "state_unit_price_vnd": Decimal(str(p_v1)),
                    "document_reference": doc_ref,
                    "notes": f"Trích xuất từ Phụ lục 1 ({notes} - KV8 Thủy Nguyên)",
                }
            )

        return items
