from enum import Enum from typing import Any, Dict, List, Optional from pydantic import BaseModel, Field class RequestType(str, Enum): movie = "movie" tv = "tv" unknown = "unknown" class NormalizedState(str, Enum): requested = "REQUESTED" approved = "APPROVED" needs_add = "NEEDS_ADD" added_to_arr = "ADDED_TO_ARR" searching = "SEARCHING" grabbed = "GRABBED" downloading = "DOWNLOADING" importing = "IMPORTING" completed = "COMPLETED" failed = "FAILED" available = "AVAILABLE" unknown = "UNKNOWN" class TimelineHop(BaseModel): service: str status: str details: Dict[str, Any] = Field(default_factory=dict) timestamp: Optional[str] = None class ActionOption(BaseModel): id: str label: str risk: str requires_confirmation: bool = True class Snapshot(BaseModel): request_id: str title: str year: Optional[int] = None request_type: RequestType = RequestType.unknown state: NormalizedState = NormalizedState.unknown state_reason: Optional[str] = None timeline: List[TimelineHop] = Field(default_factory=list) actions: List[ActionOption] = Field(default_factory=list) artwork: Dict[str, Any] = Field(default_factory=dict) raw: Dict[str, Any] = Field(default_factory=dict) class TriageRecommendation(BaseModel): action_id: str title: str reason: str risk: str class TriageResult(BaseModel): summary: str confidence: float root_cause: str recommendations: List[TriageRecommendation]