from typing import Optional

from pydantic import EmailStr, Field, model_validator

from src.apps.base.schemas.common import BaseSchema
from src.utils.regexp import EMAIL_REGEX


class UserRegisterSchema(BaseSchema):
    email: EmailStr
    phone: str
    password: str
    confirm_password: str

    # Required for all users
    first_name: str

    # Optional
    last_name: Optional[str] = None

    @model_validator(mode="after")
    def passwords_match(cls, model):
        if model.password != model.confirm_password:
            raise ValueError("Passwords do not match")
        return model

    @model_validator(mode="after")
    def email_is_valid(cls, model):
        if not model.email or not EMAIL_REGEX.match(model.email):
            raise ValueError("Invalid email address format")
        return model
