package com.red.circle.console.app.service.admin;

import com.red.circle.console.app.dto.clienobject.admin.ComboUserCO;
import com.red.circle.console.app.dto.clienobject.admin.ConsoleTokenCO;
import com.red.circle.console.app.dto.clienobject.admin.MenuTreeCO;
import com.red.circle.console.app.dto.clienobject.admin.UserCO;
import com.red.circle.console.app.dto.clienobject.admin.UserDetailsCO;
import com.red.circle.console.app.dto.cmd.admin.AccountInfoCmd;
import com.red.circle.console.app.dto.cmd.admin.PasswordCmd;
import com.red.circle.console.app.dto.cmd.admin.UserCmd;
import com.red.circle.console.app.dto.cmd.admin.UserIdCmd;
import com.red.circle.console.app.dto.cmd.admin.UserPageQryCmd;
import com.red.circle.console.inner.model.cmd.LoginCmd;
import com.red.circle.framework.core.dto.CommonCommand;
import com.red.circle.framework.dto.PageResult;
import jakarta.servlet.http.HttpServletRequest;

import java.util.List;
import java.util.Set;

/**
 * 管理后台，账号服务.
 *
 * @author pengliang on 2023/5/11
 */
public interface UserAccountService {

  /**
   * 登录.
   */
  ConsoleTokenCO login(LoginCmd cmd);

  /**
   * 获取当前用户详情.
   */
  UserDetailsCO getUserDetails(CommonCommand cmd);

  /**
   * 修改密码.
   */
  void updatePassword(PasswordCmd cmd);

  /**
   * 修改账户信息.
   */
  void updateAccountInfo(AccountInfoCmd cmd);

  /**
   * 获取账号菜单.
   */
  List<MenuTreeCO> listAccountMenus(CommonCommand cmd);

  /**
   * 获取账号按钮.
   */
  Set<String> listAccountButtonsAliases(CommonCommand cmd);

  /**
   * 是否有指定按钮的权限
   */
  boolean hasButtonsAlias(Integer userId, String alias);

  /**
   * 查询所有用户（分页.
   */
  PageResult<UserCO> pageUser(UserPageQryCmd cmd);

  /**
   * 查询单个用户.
   */
  UserCO getUser(UserIdCmd cmd);

  /**
   * 重置用户密码.
   */
  void resetPassword(UserIdCmd cmd);

  /**
   * 添加用户.
   */
  void addUser(UserCmd cmd);

  /**
   * 修改用户.
   */
  void updateUser(UserCmd cmd);

  /**
   * 获取所有用户.
   */
  List<ComboUserCO> listUser();

}
