package com.red.circle.other.app.inner.service.sys;

import com.red.circle.framework.dto.PageResult;
import com.red.circle.other.inner.model.cmd.sys.AddSysAdministratorCmd;
import com.red.circle.other.inner.model.cmd.sys.AppUserDetailsQryCmd;
import com.red.circle.other.inner.model.cmd.sys.SysAdministratorAuthCmd;
import com.red.circle.other.inner.model.cmd.sys.SysAdministratorAuthResourceCmd;
import com.red.circle.other.inner.model.cmd.sys.SysAdministratorChangeStatusCmd;
import com.red.circle.other.inner.model.dto.sys.AdministratorDTO;
import com.red.circle.other.inner.model.dto.sys.SysAdministratorAuthResourceDTO;
import com.red.circle.other.inner.model.dto.sys.SysAdministratorInfoDTO;
import java.util.List;
import java.util.Set;

/**
 * 系统管理员.
 *
 * @author pengliang on 2023/8/11
 */
public interface AdministratorClientService {

  /**
   * 获取用户认证.
   */
  AdministratorDTO getByUserId(Long userId);

  /**
   * 是否可用.
   *
   * @return true 可用，false 不可以
   */
  boolean existsAvailable(Set<Long> userIds);


  /**
   * 获取用户授权资源
   */
  List<SysAdministratorAuthResourceDTO> getSysAdministratorAuthResource();

  /**
   * 根据用户id获取用户权限菜单
   */
  List<Long> getSysAdministratorAuthResourceByUserId(Long userId);

  /**
   * 修改用户权限菜单
   */
  void updateSysAdministratorAuthResource(
      SysAdministratorAuthResourceCmd cmd);

  /**
   * 新增用户权限菜单
   */
  void addSysAdministratorAuthResource(
      SysAdministratorAuthResourceCmd cmd);

  /**
   * 删除用户权限菜单
   */
  void deleteSysAdministratorAuthResource(Long id);

  /**
   * 删除用户权限
   */
  void deleteAndAddAdministratorAuth(SysAdministratorAuthCmd cmd);


  /**
   * 新增管理员
   */
  void addSysAdministrator(AddSysAdministratorCmd cmd);

  /**
   * 分页查询管理员详情
   */
  PageResult<SysAdministratorInfoDTO> pageUserDetails(
      AppUserDetailsQryCmd appUserDetailsQuery);

  /**
   * 删除管理员
   *
   * @param id
   */
  void deleteSysAdministrator(Long id);

  /**
   * 修改管理员状态
   */
  void changeStatusAdministrator(SysAdministratorChangeStatusCmd param);

  /**
   * 修改角色
   */
  void changeRoles(Long id, String roles);
}
