from pydantic import BaseModel from typing import Optional, List from uuid import UUID from datetime import datetime from app.models.queue import AssignmentMethod class QueueCreate(BaseModel): name: str description: Optional[str] = None assignment_method: AssignmentMethod = AssignmentMethod.ROUND_ROBIN max_per_agent: int = 10 sla_first_response: int = 300 sla_resolution: int = 86400 business_hours: Optional[dict] = None fallback_flow_id: Optional[UUID] = None class QueueUpdate(BaseModel): name: Optional[str] = None description: Optional[str] = None assignment_method: Optional[AssignmentMethod] = None max_per_agent: Optional[int] = None sla_first_response: Optional[int] = None sla_resolution: Optional[int] = None business_hours: Optional[dict] = None fallback_flow_id: Optional[UUID] = None is_active: Optional[bool] = None class QueueAgentAdd(BaseModel): user_id: UUID is_supervisor: bool = False skills: List[str] = [] class QueueAgentResponse(BaseModel): id: UUID user_id: UUID user_name: Optional[str] = None user_email: Optional[str] = None is_supervisor: bool skills: List[str] created_at: datetime class Config: from_attributes = True class QueueResponse(BaseModel): id: UUID name: str description: Optional[str] assignment_method: AssignmentMethod max_per_agent: int sla_first_response: int sla_resolution: int business_hours: Optional[dict] fallback_flow_id: Optional[UUID] is_active: bool created_at: datetime agent_count: Optional[int] = 0 class Config: from_attributes = True class QueueDetailResponse(QueueResponse): agents: List[QueueAgentResponse] = [] class QuickReplyCreate(BaseModel): shortcut: str content: str attachments: List[dict] = [] queue_id: Optional[UUID] = None class QuickReplyUpdate(BaseModel): shortcut: Optional[str] = None content: Optional[str] = None attachments: Optional[List[dict]] = None queue_id: Optional[UUID] = None class QuickReplyResponse(BaseModel): id: UUID shortcut: str content: str attachments: List[dict] queue_id: Optional[UUID] created_by: UUID created_at: datetime class Config: from_attributes = True