from datetime import datetime, timezone
from sqlmodel import SQLModel, Field
from uuid import uuid4

class UserSession(SQLModel, table=True):
    __tablename__ = "user_sessions"

    id: int | None = Field(default=None, primary_key=True)

    session_id: str = Field(
        default_factory=lambda: uuid4().hex,
        index=True,
        unique=True,
        nullable=False
    )

    user_id: int = Field(foreign_key="user.id", index=True)

    refresh_token: str = Field(unique=True, index=True, nullable=False)

    user_agent: str | None = None
    ip_address: str | None = None

    is_revoked: bool = Field(default=False)
    replaced_by_token: str | None = Field(default=None)

    created_at: datetime = Field(
        default_factory=lambda: datetime.now(timezone.utc)
    )

    expires_at: datetime
