"""Identity Driver Interface — GSAP §2.2. Zero framework imports."""
from abc import ABC, abstractmethod
from dataclasses import dataclass, field
from typing import Optional

@dataclass
class ElevationRequired:
    role: str
    activation_url: str
    instructions: str
    mechanism: str = "custom"

@dataclass
class AuthResult:
    STATUS_AUTHORIZED = "authorized"
    STATUS_PENDING_ELEVATION = "pending_elevation"
    STATUS_DENIED = "denied"

    status: str
    principal_did: str = ""
    display_name: str = ""
    stable_id: str = ""
    token_jti: str = ""
    elevation_active: list = field(default_factory=list)
    mfa_satisfied: bool = False
    elevation_required: Optional[ElevationRequired] = None
    denial_reason: str = ""
    device_id: Optional[str] = None

    @property
    def is_authorized(self): return self.status == self.STATUS_AUTHORIZED
    @property
    def needs_elevation(self): return self.status == self.STATUS_PENDING_ELEVATION

class IdentityDriver(ABC):
    def __init__(self, config: dict): self.config = config
    @abstractmethod
    async def authenticate(self) -> AuthResult: ...
    @abstractmethod
    async def revoke(self, session_id: str) -> None: ...
