from pydantic import BaseModel, Field
from enum import Enum
from typing import List
from datetime import datetime
from typing import Optional
from .enum_for_models import UserTypeEnum, ProgramTypeEnum


class User(BaseModel):
    id: int | None = None
    username: str = Field(..., description="The username of the user")
    email: str = Field(..., description="The e-mail of the user")
    experience: int | None = Field(None, description="Years of Experience of the User")
    group: str | None = Field(None, description="The group of the user")
    program: List[ProgramTypeEnum] | None = None
    role: UserTypeEnum | None = None
    created_at: Optional[datetime] = datetime.now()
    uuid: str | None = None