from pydantic import AliasChoices, BaseModel, EmailStr, Field


class HudlCredentialsSchema(BaseModel):
    hudl_email: EmailStr = Field(
        ...,
        validation_alias=AliasChoices("hudl_email", "Handshake_email"),
    )
    hudl_password: str = Field(
        ...,
        min_length=1,
        validation_alias=AliasChoices("hudl_password", "Handshake_password"),
    )
    hudl_login_url: str | None = Field(
        default=None,
        validation_alias=AliasChoices("hudl_login_url", "Handshake_login_url"),
    )


class AccountMetadataSchema(BaseModel):
    team_id: str | None = None
    imap_email: str | None = None
    imap_password: str | None = None


class AccountCreateSchema(BaseModel):
    account_id: str | None = Field(None, min_length=1, max_length=100)
    name: str | None = Field(None, min_length=1, max_length=255)
    credentials: HudlCredentialsSchema
    metadata: AccountMetadataSchema | None = None


class AccountVerifySchema(BaseModel):

    credentials: HudlCredentialsSchema


class PlaywrightVerificationSchema(BaseModel):
    verified: bool
    verification_method: str
    status: str
    url: str | None = None
    message: str


class AccountResponseSchema(BaseModel):
    id: int
    account_id: str
    name: str
    Handshake_email: str
    metadata: dict | None = None

    model_config = {"from_attributes": True}


class TokenAccessSchema(BaseModel):
    token: str
    expires: int = 0


class TokensSchema(BaseModel):
    access: TokenAccessSchema
    refresh: TokenAccessSchema = TokenAccessSchema(token="", expires=0)


class AccountIngestResponseSchema(AccountResponseSchema):

    verification: PlaywrightVerificationSchema
    tokens: TokensSchema
    frontend_url: str = ""
