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

import cn.nianxx.thhotel.platform.common.result.PlatformPageResult;
import cn.nianxx.thhotel.platform.identity.common.request.AdminUserCreateRequest;
import cn.nianxx.thhotel.platform.identity.common.request.AdminUserHotelAssignmentRequest;
import cn.nianxx.thhotel.platform.identity.common.request.AdminUserPasswordResetRequest;
import cn.nianxx.thhotel.platform.identity.common.request.AdminUserRoleAssignmentRequest;
import cn.nianxx.thhotel.platform.identity.common.request.AdminUserUpdateRequest;
import cn.nianxx.thhotel.platform.identity.common.result.AdminUserDetailResult;
import cn.nianxx.thhotel.platform.identity.common.result.AdminUserListItemResult;
import cn.nianxx.thhotel.platform.identity.common.result.AdminUserPasswordResetResult;
import cn.nianxx.thhotel.platform.security.common.dto.AuthenticatedUserContext;

/**
 * 管理后台用户管理服务。提供用户查询和后续账号维护能力。
 */
public interface AdminUserManagementService {

    /**
     * 分页查询用户列表。
     */
    PlatformPageResult<AdminUserListItemResult> queryUsers(
            String keyword,
            String userStatus,
            Integer pageNum,
            Integer pageSize);

    /**
     * 查询用户详情。
     */
    AdminUserDetailResult getUser(String userId);

    /**
     * 新增普通用户账号。
     */
    AdminUserDetailResult createUser(AdminUserCreateRequest request, AuthenticatedUserContext actor);

    /**
     * 编辑用户基础信息和状态。
     */
    AdminUserDetailResult updateUser(String userId, AdminUserUpdateRequest request, AuthenticatedUserContext actor);

    /**
     * 覆盖用户角色关系。
     */
    AdminUserDetailResult assignRoles(String userId, AdminUserRoleAssignmentRequest request, AuthenticatedUserContext actor);

    /**
     * 覆盖用户酒店授权和默认酒店。
     */
    AdminUserDetailResult assignHotels(String userId, AdminUserHotelAssignmentRequest request, AuthenticatedUserContext actor);

    /**
     * 重置用户密码，临时密码只在响应返回。
     */
    AdminUserPasswordResetResult resetPassword(
            String userId,
            AdminUserPasswordResetRequest request,
            AuthenticatedUserContext actor);
}
