from __future__ import annotations

from datetime import date, datetime
from decimal import Decimal

from app.models.site_operations_schemas import (
    AttendanceEntry,
    GPSPhotoAttachment,
    MachineHourEntry,
    MaterialRequisitionItem,
    MaterialRequisitionRecord,
    MRStatusEnum,
    SiteDiaryRecord,
)

from .constants import PROJECT_NAMES


class SiteOperationsSeedMixin:
    """Initial truthful seed records mixin."""

    def _init_seeds(self) -> None:
        # Seed Site Diary for DA-KM-BENKEM-2025-2026
        diary_id = "DIARY-2026-KM-001"
        self._diaries[diary_id] = SiteDiaryRecord(
            diary_id=diary_id,
            project_code="DA-KM-BENKEM-2025-2026",
            project_name=PROJECT_NAMES["DA-KM-BENKEM-2025-2026"],
            log_date=date(2026, 8, 22),
            weather_condition="SUNNY",
            temperature_celsius=31.5,
            engineer_name="Kỹ sư Phạm Văn Tùng",
            site_manager_name="Chỉ huy trưởng Nguyễn Sĩ Sơn",
            work_summary="Đào đất hố móng cống hộp K0+150 đến K0+200, gia cố cọc cừ tràm và đổ bê tông lót móng M100.",
            safety_incidents="Không có sự cố an toàn",
            total_workers=14,
            total_machine_hours=Decimal("15.5000"),
            attendance=[
                AttendanceEntry(
                    employee_code="NV-012",
                    employee_name="Phạm Văn Tùng",
                    role_title="Kỹ sư hiện trường",
                    shift="FULL_DAY",
                    hours_worked=Decimal("8.0000"),
                ),
                AttendanceEntry(
                    employee_code="NV-045",
                    employee_name="Trần Đình Hùng",
                    role_title="Lái máy đào",
                    shift="FULL_DAY",
                    hours_worked=Decimal("8.0000"),
                ),
            ],
            machine_logs=[
                MachineHourEntry(
                    equipment_code="EXC-KOMATSU-01",
                    equipment_name="Máy đào Komatsu PC200-8",
                    operator_name="Trần Đình Hùng",
                    start_engine_hours=Decimal("4120.0000"),
                    end_engine_hours=Decimal("4128.0000"),
                    total_operating_hours=Decimal("8.0000"),
                    work_description="Đào hố móng cống hộp K0+150",
                )
            ],
            photos=[
                GPSPhotoAttachment(
                    photo_id="IMG-KM-001",
                    file_url="/static/uploads/benkem_mongcong_01.jpg",
                    latitude=20.7352,
                    longitude=106.6811,
                    accuracy_meters=3.5,
                    captured_at=datetime(2026, 8, 22, 10, 15, 0),
                    wbs_task_code="WBS-KM-01-M100",
                    caption="Thi công lớp bê tông lót cống hộp",
                )
            ],
            created_at=datetime(2026, 8, 22, 17, 30, 0),
        )

        # Seed Material Requisition
        mr_id = "MR-2026-KM-001"
        self._requisitions[mr_id] = MaterialRequisitionRecord(
            mr_id=mr_id,
            project_code="DA-KM-BENKEM-2025-2026",
            project_name=PROJECT_NAMES["DA-KM-BENKEM-2025-2026"],
            wbs_task_code="WBS-KM-02-BETONG",
            urgency="HIGH",
            status=MRStatusEnum.APPROVED,
            required_date=date(2026, 8, 24),
            requester_name="Kỹ sư Phạm Văn Tùng",
            approver_name="Chỉ huy trưởng Nguyễn Sĩ Sơn",
            approval_timestamp=datetime(2026, 8, 22, 16, 0, 0),
            total_estimated_amount=Decimal("86500000.0000"),
            items=[
                MaterialRequisitionItem(
                    item_code="MAT-CAT-VANG",
                    material_name="Cát vàng đổ bê tông",
                    unit="m³",
                    requested_qty=Decimal("45.0000"),
                    approved_qty=Decimal("45.0000"),
                    unit_price_estimate=Decimal("320000.0000"),
                    notes="Cấp cho trạm trộn bê tông cống Bến Kem",
                ),
                MaterialRequisitionItem(
                    item_code="MAT-DA-1X2",
                    material_name="Đá 1x2 xanh",
                    unit="m³",
                    requested_qty=Decimal("60.0000"),
                    approved_qty=Decimal("60.0000"),
                    unit_price_estimate=Decimal("380000.0000"),
                    notes="Đá sàng tiêu chuẩn thí nghiệm đạt R28",
                ),
                MaterialRequisitionItem(
                    item_code="MAT-XM-CHINFON",
                    material_name="Xi măng Chinfon PCB40 bao",
                    unit="Tấn",
                    requested_qty=Decimal("18.0000"),
                    approved_qty=Decimal("18.0000"),
                    unit_price_estimate=Decimal("1750000.0000"),
                    notes="Xi măng nguyên đai nguyên kiện có CO/CQ",
                ),
            ],
            created_at=datetime(2026, 8, 22, 14, 0, 0),
            updated_at=datetime(2026, 8, 22, 16, 0, 0),
        )
