import enum
from typing import Optional
from uuid import UUID
from pydantic import BaseModel, EmailStr, Field

class Role(enum.StrEnum):
    MEMBER = "member"
    ADMINISTRATOR = "administrator"

class UserBase(BaseModel):
    email: EmailStr = Field(max_length=60)
    friendly_name: str
    is_active: bool

class UserUpdate(BaseModel):
    email: Optional[str] = None
    friendly_name: Optional[str] = None

class AdministrativeUserUpdate(UserUpdate):
    is_active: Optional[bool] = None

class UserCreate(UserBase):
    password: str = Field(max_length=100)
    pass

class User(UserBase):
    id: UUID
    role: Role

    class Config:
        from_attributes = True

class PasswordUpdate(BaseModel):
    old_password: str = Field(max_length=100)
    new_password: str = Field(max_length=100)

class LoginRequest(BaseModel):
    email: EmailStr = Field(max_length=60)
    password: str = Field(max_length=100)