from typing import Literal, Optional
from pydantic import BaseModel, EmailStr, Field


class UserCreate(BaseModel):
    username: str = Field(min_length=3, max_length=50)
    email: EmailStr
    password: str = Field(min_length=6, max_length=128)
    role: Literal["admin", "user"] = "user"


class ProjectCreate(BaseModel):
    name: str = Field(min_length=2, max_length=120)
    description: Optional[str] = None
    is_group: bool = False


class TaskCreate(BaseModel):
    project_id: int
    title: str = Field(min_length=2, max_length=200)
    description: Optional[str] = None
    priority: Literal["low", "medium", "high"] = "medium"
    duration_days: int = Field(ge=1)
    assigned_user_id: Optional[int] = None


class TaskStatusUpdate(BaseModel):
    status: Literal["not_started", "in_progress", "done"]


class TaskAssign(BaseModel):
    task_id: int
    user_id: int


class TaskRequestCreate(BaseModel):
    task_id: int
    target_user_id: int
