# app/modules/dispatch/schemas.py
from pydantic import BaseModel
from typing import Optional, List
from uuid import UUID
from datetime import date, datetime
from decimal import Decimal


# ─── Thermal Checksheet ───────────────────────────────────────────────────────

class ThermalItemData(BaseModel):
    item_no: int
    ok: bool
    authority_name: Optional[str] = None
    fault_type: Optional[str] = None      # OUR_FAULT | MANUFACTURING
    remarks: Optional[str] = None


class ThermalChecksheetData(BaseModel):
    """JSON payload embedded in the multipart FormData field `data`."""
    chassis_no: str
    model: Optional[str] = None
    engine_type: Optional[str] = None
    date: Optional[str] = None            # ISO date string
    signature: Optional[str] = None
    rows: List[ThermalItemData] = []


class ThermalItemOut(BaseModel):
    item_result_id: UUID
    item_no: int
    item_text: Optional[str]
    is_ok: bool
    photo_url: Optional[str]
    authority_name: Optional[str]
    fault_type: Optional[str]
    remarks: Optional[str]
    mail_screenshot_url: Optional[str]
    model_config = {"from_attributes": True, "protected_namespaces": ()}


class ThermalChecksheetOut(BaseModel):
    checksheet_id: UUID
    chassis_id: UUID
    chassis_no: str
    model: Optional[str]
    engine_type: Optional[str]
    check_date: Optional[date]
    signature: Optional[str]
    photo_front: Optional[str]
    photo_rear: Optional[str]
    photo_rh: Optional[str]
    photo_lh: Optional[str]
    all_ok: bool
    submitted_at: Optional[datetime]
    items: List[ThermalItemOut] = []
    model_config = {"from_attributes": True, "protected_namespaces": ()}


# ─── Gate Pass ────────────────────────────────────────────────────────────────

class GatePassItemData(BaseModel):
    key: str
    checked: bool
    qty: int


class GatePassData(BaseModel):
    """JSON payload embedded in the multipart FormData field `data`."""
    chassis_no: str
    generated_date: Optional[str] = None
    items: List[GatePassItemData] = []
    fuel_before_ltr: Optional[str] = None
    filling_fuel_qty_ltr: Optional[str] = None
    driver_name: Optional[str] = None
    dispatch_authority: Optional[str] = None


class GatePassItemOut(BaseModel):
    gate_pass_item_id: UUID
    item_key: str
    item_label: str
    is_checked: bool
    qty: int
    model_config = {"from_attributes": True, "protected_namespaces": ()}


class GatePassOut(BaseModel):
    gate_pass_id: UUID
    chassis_id: UUID
    chassis_no: str
    generated_at: datetime
    fuel_before_ltr: Optional[Decimal]
    filling_fuel_qty_ltr: Optional[Decimal]
    driver_name: Optional[str]
    driver_photo_url: Optional[str]
    dispatch_authority: Optional[str]
    items: List[GatePassItemOut] = []
    model_config = {"from_attributes": True, "protected_namespaces": ()}


# ─── Dispatch Queue ───────────────────────────────────────────────────────────

class DispatchQueueItem(BaseModel):
    id: UUID                      # chassis_id
    chassis_no: str
    model: Optional[str]
    pdi_approved_date: Optional[str]
    dispatch_status: str          # PENDING_THERMAL | PENDING_GATEPASS | DISPATCHED
    model_config = {"from_attributes": True, "protected_namespaces": ()}
