""" Analytics Pydantic schemas for TCO (Total Cost of Ownership) API responses. """ from typing import List, Optional, Dict, Any from pydantic import BaseModel, Field class TCOResponse(BaseModel): """Response schema for a single TCO category breakdown.""" category_id: int = Field(..., description="Cost category ID") category_code: str = Field(..., description="Category code (e.g., 'FUEL', 'MAINTENANCE')") category_name: str = Field(..., description="Human-readable category name") amount: float = Field(..., description="Total amount in original currency") currency: str = Field(..., description="Original currency code (e.g., 'EUR', 'HUF')") amount_huf: float = Field(..., description="Amount converted to HUF") percentage: float = Field(..., description="Percentage of total cost (0-100)") class Config: from_attributes = True class TCOSummaryStats(BaseModel): """Statistics part of the TCO summary.""" total_cost: float = Field(..., description="Total cost in HUF") cost_per_km: Optional[float] = Field(None, description="Cost per kilometer (HUF/km)") total_transactions: int = Field(..., description="Number of cost transactions") date_range: Optional[Dict[str, str]] = Field(None, description="Start and end dates if filtered") class TCOSummaryResponse(BaseModel): """Complete TCO summary for a vehicle.""" vehicle_id: int = Field(..., description="Vehicle ID") user_tco: List[TCOResponse] = Field(..., description="TCO breakdown for the current user/organization") lifetime_tco: List[TCOResponse] = Field(..., description="Lifetime TCO across all owners (anonymized)") benchmark_tco: List[TCOResponse] = Field(..., description="Benchmark TCO for similar vehicles") stats: TCOSummaryStats = Field(..., description="Aggregated statistics") class Config: from_attributes = True class TCOErrorResponse(BaseModel): """Error response for TCO endpoints.""" detail: str = Field(..., description="Error description") vehicle_id: Optional[int] = Field(None, description="Related vehicle ID if applicable")