"""Shared test fixtures/types for mgf-auth.

`Principal` is a stand-in for a consumer's session-principal type — the
library is generic over it (`SessionVerifier[P]`), so the tests pick an
arbitrary shape to exercise the generic mocks + Clerk verifier resolver.
"""

from __future__ import annotations

from dataclasses import dataclass
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from datetime import datetime
    from uuid import UUID

__all__ = ["Principal"]


@dataclass(frozen=True, slots=True)
class Principal:
    """A minimal session principal — the consumer's `P` in these tests."""

    user_id: UUID
    tenant_id: UUID
    role: str
    email: str
    locale: str
    issued_at: datetime
    expires_at: datetime
    clerk_session_id: str | None = None
