from pydantic import BaseModel, Field
from typing import Optional, List, Dict, Any
from datetime import datetime

class CourseCreate(BaseModel):
    title: str = Field(..., min_length=1, max_length=200)
    description: Optional[str] = None
    thumbnail: Optional[str] = None
    status: str = Field('draft', pattern='^(draft|published)$')

class CourseUpdate(BaseModel):
    title: Optional[str] = Field(None, min_length=1, max_length=200)
    description: Optional[str] = None
    thumbnail: Optional[str] = None
    status: Optional[str] = Field(None, pattern='^(draft|published)$')
    order_index: Optional[int] = None

class SectionCreate(BaseModel):
    course_id: int
    title: str = Field(..., min_length=1, max_length=200)
    description: Optional[str] = None
    order_index: Optional[int] = 0

class SectionUpdate(BaseModel):
    title: Optional[str] = Field(None, min_length=1, max_length=200)
    description: Optional[str] = None
    order_index: Optional[int] = None

class LessonCreate(BaseModel):
    course_id: int
    section_id: Optional[int] = None
    title: str = Field(..., min_length=1, max_length=200)
    description: Optional[str] = None
    content_type: str = Field(..., pattern='^(video|text|file|url)$')
    content_data: str  # JSON string
    duration_minutes: Optional[int] = Field(None, ge=0)
    order_index: Optional[int] = 0
    status: Optional[str] = Field('published', pattern='^(draft|published)$')
    attachment_url: Optional[str] = None
    attachment_name: Optional[str] = None

class LessonUpdate(BaseModel):
    section_id: Optional[int] = None
    title: Optional[str] = Field(None, min_length=1, max_length=200)
    description: Optional[str] = None
    content_type: Optional[str] = Field(None, pattern='^(video|text|file|url)$')
    content_data: Optional[str] = None
    duration_minutes: Optional[int] = Field(None, ge=0)
    order_index: Optional[int] = None
    status: Optional[str] = Field(None, pattern='^(draft|published)$')
    attachment_url: Optional[str] = None
    attachment_name: Optional[str] = None

class ProgressUpdate(BaseModel):
    lesson_id: int
    completed: bool

class EnrollmentCreate(BaseModel):
    course_id: int
