from datetime import datetime
from typing import Optional

from pydantic import BaseModel, EmailStr

from app.models.user import UserType


class UserLogin(BaseModel):
    """Schema for user login."""
    email: EmailStr
    password: str


class UserCreate(BaseModel):
    """Schema for creating a new user."""
    email: EmailStr
    password: str
    user_type: UserType
    matric_number: Optional[str] = None
    application_id: Optional[str] = None


class UserResponse(BaseModel):
    """Schema for user response."""
    id: str
    email: str
    userType: str
    matricNumber: Optional[str] = None
    applicationId: Optional[str] = None
    isActive: bool
    lastLogin: Optional[datetime] = None
    createdAt: datetime
    updatedAt: datetime

    class Config:
        from_attributes = True
        populate_by_name = True
