"""管理员用户表模型"""

import datetime
from typing import Optional

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

from backend.core.database import Base


class AdminUser(Base):
    """管理员用户表

    用于管理看板的登录认证,支持多管理员。
    密码使用 hashlib + 随机 salt 存储。
    role: super_admin(高级管理员)/ admin(普通管理员)。
    """
    __tablename__ = "admin_users"

    id: Mapped[int] = mapped_column(sa.Integer, primary_key=True, autoincrement=True)
    username: Mapped[str] = mapped_column(sa.String(64), nullable=False, unique=True)
    password_hash: Mapped[str] = mapped_column(sa.String(128), nullable=False)
    salt: Mapped[str] = mapped_column(sa.String(32), nullable=False)
    role: Mapped[str] = mapped_column(sa.String(20), default="admin", nullable=False)
    is_active: Mapped[bool] = mapped_column(sa.Boolean, default=True)
    login_fail_count: Mapped[int] = mapped_column(sa.Integer, default=0, nullable=False)
    locked_until: Mapped[Optional[datetime.datetime]] = mapped_column(sa.DateTime, nullable=True)
    created_at: Mapped[datetime.datetime] = mapped_column(
        sa.DateTime, nullable=False, server_default=func.now(),
    )
    updated_at: Mapped[datetime.datetime] = mapped_column(
        sa.DateTime, nullable=False, server_default=func.now(), onupdate=func.now(),
    )

    def __repr__(self) -> str:
        return f"<AdminUser(id={self.id}, username={self.username}, role={self.role})>"