from __future__ import annotations

from datetime import datetime, timezone
from typing import Literal

from pydantic import BaseModel, ConfigDict, Field


def utc_now() -> datetime:
    return datetime.now(timezone.utc)


class StrictModel(BaseModel):
    model_config = ConfigDict(extra="forbid")


class LeaseRequest(StrictModel):
    capability: Literal["video", "image"]


class LeaseView(StrictModel):
    lease_id: str = Field(min_length=1, max_length=160)
    capability: Literal["video", "image"]
    endpoint: str
    active: bool = True
    created_at: datetime
    expires_at: datetime
    released_at: datetime | None = None
