"""# Generated from swarm story V-K08: Conversation Summarization
"""

from datetime import datetime
from typing import List, Optional
from uuid import UUID

from pydantic import BaseModel, Field, field_validator


class KeyPoints(BaseModel):
    """Structured key points extracted from conversation."""
    
    decisions: List[str] = Field(
        default_factory=list,
        description="Decisions made during the call",
        max_length=50  # Max items
    )
    action_items: List[str] = Field(
        default_factory=list,
        description="Action items assigned or mentioned",
        max_length=50
    )
    important_facts: List[str] = Field(
        default_factory=list,
        description="Important facts or information shared",
        max_length=50
    )


class SummaryData(BaseModel):
    """Complete summary structure stored in database."""
    
    text_summary: str = Field(
        ...,
        description="3-line summary of the conversation",
        max_length=1000
    )
    key_points: KeyPoints
    generated_at: datetime = Field(default_factory=datetime.utcnow)
    
    @field_validator('text_summary')
    @classmethod
    def validate_three_lines(cls, v: str) -> str:
        """Ensure summary is exactly 3 lines as per acceptance criteria."""
        lines = [line.strip() for line in v.split('\n') if line.strip()]
        if len(lines) != 3:
            raise ValueError(f"Summary must be exactly 3 lines, got {len(lines)}")
        return v


class SummaryResponse(BaseModel):
    """API response model for GET /api/v1/calls/{id}/summary."""
    
    call_id: UUID
    summary: Optional[SummaryData] = None
    status: str = Field(
        ...,
        description="Processing status: completed, pending, or failed"
    )
    generated_at: Optional[datetime] = None
    
    class Config:
        from_attributes = True


class ErrorResponse(BaseModel):
    """Standard error response model."""
    
    detail: str
    error_code: Optional[str] = None
    call_id: Optional[UUID] = None
