package com.seer.teach.user.admin.service;

import com.seer.teach.common.PageListBean;
import com.seer.teach.user.admin.request.AdminUpdateReq;
import com.seer.teach.user.admin.request.AdminUserLoginReq;
import com.seer.teach.user.admin.request.AdminUserSearchReq;
import com.seer.teach.user.admin.request.RegisterAdminReq;
import com.seer.teach.user.admin.response.AdminUserPageResp;

import java.util.HashMap;

/**
 * <p>
 * 管理员用户服务接口，定义了管理员用户的操作方法
 * </p>
 *
 * @author Captain
 * @since 2025-05-14
 */
public interface AdminUserService {

    /**
     * 后台管理登录接口
     *
     * @param params 登录请求参数
     * @return 返回包含登录结果的HashMap，通常包含token等信息
     */
    HashMap<String, Object> login(AdminUserLoginReq params);

    /**
     * 添加管理员
     *
     * @param adminUserReq 管理员注册请求参数
     */
    void register(RegisterAdminReq adminUserReq);

    /**
     * 分页查询管理员列表
     *
     * @param page      当前页码
     * @param size      每页记录数
     * @param keyword  搜索关键字
     * @return 返回分页管理员用户列表的响应数据
     */
    PageListBean<AdminUserPageResp> listPage(Integer page, Integer size, String keyword);

    /**
     * 修改管理员信息
     *
     * @param params 管理员更新请求参数
     * @param id     管理员唯一标识
     */
    /*@CacheInvalidate(name = UserInfoCacheService.USER_CACHE_NAME, key = "#id")*/
    void updateAdminById(AdminUpdateReq params, Integer id);

    /**
     * 修改管理员状态
     *
     * @param id     管理员唯一标识
     * @param status 新的状态值
     */
    void updateStatus(Integer id, Integer status);

    /**
     * 重置密码
     *
     * @param params 重置密码请求参数
     * @param id     管理员唯一标识
     * @return 重置密码结果
     */
    boolean resetPassword(AdminUpdateReq params, Integer id);

    /**
     * 登出接口
     */
    void logout();

    /**
     * 删除管理员信息
     *
     * @param id 管理员唯一标识
     * @return 删除结果
     */
    boolean removeById(Integer id);

    /**
     * 搜索人员
     *
     * @param searchReq 搜索请求参数
     * @return 返回搜索结果
     *
     */
    PageListBean<AdminUserPageResp> list(AdminUserSearchReq searchReq);

    /**
     * 根据角色编码查询人员列表
     *
     * @param page      当前页码
     * @param size      每页记录数
     * @param roleCode  角色编码
     * @return 角色编码查询人员列表的响应数据
     */
    PageListBean<AdminUserPageResp> listByRole(Integer page, Integer size, String roleCode);

    /**
     * 根据角色Id查询人员列表
     *
     * @param searchReq 搜索请求参数
     * @return 角色Id查询人员列表的响应数据
     */
    PageListBean<AdminUserPageResp> getUserListByRoleId(AdminUserSearchReq searchReq);
}
