package cn.nianxx.thhotel.platform.identity.repository;

import cn.nianxx.thhotel.platform.common.dto.PlatformPageSnapshot;
import cn.nianxx.thhotel.platform.identity.domain.PlatformUserEntity;
import cn.nianxx.thhotel.platform.identity.domain.PlatformUserSessionEntity;
import java.util.Optional;

/**
 * 平台用户与 session 仓储。隔离登录服务对 MyBatis Mapper 的直接依赖。
 */
public interface PlatformIdentityRepository {

    /**
     * 按用户名查询用户账号。
     */
    Optional<PlatformUserEntity> findUserByUsername(String username);

    /**
     * 按用户内部 ID 查询用户账号。
     */
    Optional<PlatformUserEntity> findUserById(Long userId);

    /**
     * 管理后台分页查询用户账号。
     */
    PlatformPageSnapshot<PlatformUserEntity> queryUsers(String keyword, String userStatus, int pageNum, int pageSize);

    /**
     * 统计系统中已有可登录的启用超级管理员数量。
     */
    long countSuperAdminUsers();

    /**
     * 新增用户账号。
     */
    void insertUser(PlatformUserEntity user);

    /**
     * 更新用户账号。
     */
    void updateUser(PlatformUserEntity user);

    /**
     * 新增用户 session。
     */
    void insertSession(PlatformUserSessionEntity session);

    /**
     * 根据 token 哈希查询 session。
     */
    Optional<PlatformUserSessionEntity> findSessionByTokenHash(String tokenHash);

    /**
     * 更新用户 session。
     */
    void updateSession(PlatformUserSessionEntity session);

    /**
     * 撤销指定用户全部 ACTIVE session。
     */
    void revokeActiveSessionsByUserId(Long userId);
}
