"""Registration token schemas for API validation."""

import uuid
from datetime import datetime

from pydantic import BaseModel, ConfigDict, Field


class RegistrationTokenCreate(BaseModel):
    """Schema for creating a new registration token."""

    description: str | None = Field(
        default=None,
        max_length=255,
        description="Human-readable description for this token",
    )
    max_uses: int = Field(
        default=1,
        ge=0,
        description="Maximum number of times this token can be used (0 = unlimited)",
    )
    expires_in_hours: int | None = Field(
        default=None,
        ge=1,
        le=8760,  # Max 1 year
        description="Number of hours until this token expires (optional)",
    )


class RegistrationTokenResponse(BaseModel):
    """Schema for registration token response (without plaintext token)."""

    model_config = ConfigDict(from_attributes=True)

    id: uuid.UUID
    tenant_id: uuid.UUID
    description: str | None
    max_uses: int
    use_count: int
    expires_at: datetime | None
    revoked: bool
    created_at: datetime
    created_by: str | None


class RegistrationTokenCreatedResponse(RegistrationTokenResponse):
    """Schema for registration token creation response.

    This is the only time the plaintext token is returned to the client.
    It must be securely stored as it cannot be retrieved again.
    """

    token: str = Field(
        ...,
        description="The plaintext registration token. Store this securely - it cannot be retrieved again.",
    )


class RegistrationTokenList(BaseModel):
    """Schema for listing registration tokens."""

    tokens: list[RegistrationTokenResponse]
    total: int
