from typing import Any, Dict, List, Optional from pydantic import BaseModel, Field class ServiceStatus(BaseModel): enabled: bool = Field(..., description="Whether the service is enabled") url: str = Field(..., description="Service URL") status: str = Field(..., description="Service status") class HAAttributes(BaseModel): unit_of_measurement: Optional[str] = Field(None, description="Unit of measurement") friendly_name: Optional[str] = Field(None, description="Friendly name") class HAEntity(BaseModel): entity_id: str = Field(..., description="Entity ID") state: str = Field(..., description="Current state") attributes: HAAttributes = Field(..., description="Entity attributes") class HAEntitiesResponse(BaseModel): entities: List[HAEntity] = Field(..., description="List of Home Assistant entities") class FrigateEvent(BaseModel): id: str = Field(..., description="Event ID") timestamp: str = Field(..., description="Event timestamp") camera: str = Field(..., description="Camera name") label: str = Field(..., description="Detection label") confidence: float = Field(..., ge=0, le=1, description="Detection confidence") class FrigateEventsResponse(BaseModel): events: List[FrigateEvent] = Field(..., description="List of Frigate events") class ImmichAsset(BaseModel): id: str = Field(..., description="Asset ID") filename: str = Field(..., description="Filename") created_at: str = Field(..., description="Creation timestamp") tags: List[str] = Field(..., description="Asset tags") faces: List[str] = Field(..., description="Detected faces") class ImmichAssetsResponse(BaseModel): assets: List[ImmichAsset] = Field(..., description="List of Immich assets") class EventData(BaseModel): service: str = Field(..., description="Service name") event_type: str = Field(..., description="Event type") metadata: Dict[str, Any] = Field(default_factory=dict, description="Event metadata") class EventResponse(BaseModel): status: str = Field(..., description="Publication status") event: Dict[str, Any] = Field(..., description="Published event") class Event(BaseModel): timestamp: str = Field(..., description="Event timestamp") service: str = Field(..., description="Service name") event_type: str = Field(..., description="Event type") metadata: str = Field(..., description="Event metadata as JSON string") class EventsResponse(BaseModel): events: List[Event] = Field(..., description="List of events") class HealthResponse(BaseModel): status: str = Field(..., description="Service health status") timestamp: str = Field(..., description="Health check timestamp") class RootResponse(BaseModel): message: str = Field(..., description="API message") version: str = Field(..., description="API version")