from pydantic import BaseModel, EmailStr, Field from typing import Optional from datetime import date, datetime class UserCreate(BaseModel): first_name: str = Field(..., min_length=2, max_length=50) last_name: str = Field(..., min_length=2, max_length=50) display_name: Optional[str] = Field(None, max_length=100) email: EmailStr phone: str = Field(..., min_length=10, max_length=20) password: str gender: Optional[str] = Field(None, max_length=15) dob: Optional[date] = None department_id: str = Field(..., min_length=26, max_length=26) designation_id: str = Field(..., min_length=26, max_length=26) role_id: str = Field(..., min_length=26, max_length=26) manager_id: Optional[str] = Field(None, min_length=26, max_length=26) class UserUpdate(BaseModel): first_name: Optional[str] = Field(None, min_length=2, max_length=50) last_name: Optional[str] = Field(None, min_length=2, max_length=50) display_name: Optional[str] = Field(None, max_length=100) email: Optional[EmailStr] = None phone: Optional[str] = Field(None, min_length=10, max_length=20) password: Optional[str] = None gender: Optional[str] = Field(None, max_length=15) dob: Optional[date] = None department_id: Optional[str] = Field(None, min_length=26, max_length=26) designation_id: Optional[str] = Field(None, min_length=26, max_length=26) role_id: Optional[str] = Field(None, min_length=26, max_length=26) manager_id: Optional[str] = Field(None, min_length=26, max_length=26) profile_image_id: Optional[str] = Field(None, min_length=26, max_length=26) class UserResponse(BaseModel): user_id: str employee_code: Optional[str] first_name: str last_name: str display_name: Optional[str] email: EmailStr phone: str profile_image_id: Optional[str] gender: Optional[str] dob: Optional[date] department_id: str designation_id: str role_id: str manager_id: Optional[str] is_active: bool email_verified: bool phone_verified: bool created_at: datetime last_login: Optional[datetime] = None last_activity: Optional[str] = None class Config: from_attributes = True