from dataclasses import dataclass
from typing import NamedTuple, NewType

from rvpc.models.models import TokenInfo


UserToken = NewType("UserToken", str)
AdminToken = NewType("AdminToken", str)
CaptureToken = NewType("CaptureToken", str)


class ValidationResult:
    pass


@dataclass
class TokenValidationError(ValidationResult):
    reason: str
    token_info: TokenInfo | None = None


@dataclass
class TokenValidated(ValidationResult):
    id: str
    token_info: TokenInfo


class GenericToken(NamedTuple):
    nonce: str
    token_type: str
    expires_at: int


@dataclass
class DecodedPayload:
    token_type: str
    id: str
    nonce: str
    expires_at: str
