"""Todo Models"""
from pydantic import BaseModel, Field
from typing import List, Optional
from datetime import datetime, date
from enum import Enum


class PriorityLevel(str, Enum):
    """우선순위"""
    HIGH = "HIGH"
    MEDIUM = "MEDIUM"
    LOW = "LOW"


class TodoExtractRequest(BaseModel):
    """Todo 자동 추출 요청"""
    meeting_id: str = Field(..., description="회의 ID")
    transcript_text: str = Field(..., description="전체 회의록 텍스트")
    participants: List[str] = Field(..., description="참석자 목록")

    class Config:
        json_schema_extra = {
            "example": {
                "meeting_id": "550e8400-e29b-41d4-a716-446655440000",
                "transcript_text": "안건 1: 신제품 기획...\n결정사항: API 설계서는 박민수님이 1월 30일까지 작성...",
                "participants": ["김민준", "박서연", "이준호", "박민수"]
            }
        }


class ExtractedTodo(BaseModel):
    """추출된 Todo"""
    title: str = Field(..., description="Todo 제목")
    description: Optional[str] = Field(None, description="상세 설명")
    assignee: str = Field(..., description="담당자 이름")
    due_date: Optional[date] = Field(None, description="마감일")
    priority: PriorityLevel = Field(default=PriorityLevel.MEDIUM, description="우선순위")
    section_reference: str = Field(..., description="섹션 참조 (예: '결정사항 #1')")
    confidence_score: float = Field(..., ge=0.0, le=1.0, description="신뢰도 점수")

    class Config:
        json_schema_extra = {
            "example": {
                "title": "API 설계서 작성",
                "description": "신규 프로젝트 API 설계서 작성 완료",
                "assignee": "박민수",
                "due_date": "2025-01-30",
                "priority": "HIGH",
                "section_reference": "결정사항 #1",
                "confidence_score": 0.92
            }
        }


class TodoExtractResponse(BaseModel):
    """Todo 자동 추출 응답"""
    meeting_id: str = Field(..., description="회의 ID")
    todos: List[ExtractedTodo] = Field(..., description="추출된 Todo 목록")
    total_count: int = Field(..., description="전체 Todo 개수")
    extracted_at: datetime = Field(default_factory=datetime.utcnow, description="추출 시각")

    class Config:
        json_schema_extra = {
            "example": {
                "meeting_id": "550e8400-e29b-41d4-a716-446655440000",
                "todos": [
                    {
                        "title": "API 설계서 작성",
                        "description": "신규 프로젝트 API 설계서 작성 완료",
                        "assignee": "박민수",
                        "due_date": "2025-01-30",
                        "priority": "HIGH",
                        "section_reference": "결정사항 #1",
                        "confidence_score": 0.92
                    }
                ],
                "total_count": 5,
                "extracted_at": "2025-01-23T10:30:00Z"
            }
        }
