from pydantic import BaseModel, EmailStr, Field, field_validator


class ContactFormPayload(BaseModel):
    firstName: str = Field(min_length=1, max_length=120)
    lastName: str = Field(min_length=1, max_length=120)
    email: EmailStr
    phone: str | None = Field(default=None, max_length=40)
    message: str = Field(min_length=2, max_length=5000)


class SmsConsentPayload(BaseModel):
    firstName: str = Field(min_length=1, max_length=120)
    lastName: str = Field(min_length=1, max_length=120)
    email: EmailStr
    phone: str = Field(min_length=10, max_length=40)
    consent: bool

    @field_validator("consent")
    @classmethod
    def must_consent(cls, v: bool) -> bool:
        if not v:
            raise ValueError("SMS consent must be given to submit this form")
        return v


class SubmissionCreated(BaseModel):
    success: bool
    id: str
