"""管理员 Token 表模型"""

import datetime

import sqlalchemy as sa
from sqlalchemy import func
from sqlalchemy.orm import Mapped, mapped_column

from backend.core.database import Base


class AdminToken(Base):
    """管理员认证 Token 表

    登录成功后生成 uuid4 token,24 小时过期。
    存储在数据库中,服务重启不丢失会话。
    """
    __tablename__ = "admin_tokens"

    id: Mapped[int] = mapped_column(sa.Integer, primary_key=True, autoincrement=True)
    admin_id: Mapped[int] = mapped_column(
        sa.Integer, sa.ForeignKey("admin_users.id", ondelete="CASCADE"), nullable=False,
    )
    token: Mapped[str] = mapped_column(sa.String(64), nullable=False, unique=True)
    expires_at: Mapped[datetime.datetime] = mapped_column(sa.DateTime, nullable=False)
    created_at: Mapped[datetime.datetime] = mapped_column(
        sa.DateTime, nullable=False, server_default=func.now(),
    )

    __table_args__ = (
        sa.Index("idx_admin_token", "token"),
    )

    def __repr__(self) -> str:
        return f"<AdminToken(id={self.id}, admin_id={self.admin_id})>"