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

import com.red.circle.other.inner.model.cmd.room.RoomProfileOpsQryCmd;
import com.red.circle.other.inner.model.dto.live.RoomCounterDTO;
import com.red.circle.other.inner.model.dto.live.RoomProfileDTO;
import com.red.circle.other.inner.model.dto.live.RoomProfileManagerDTO;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 资料管理.
 *
 * @author pengliang on 2023/5/31
 */
public interface RoomManagerClientService {

  /**
   * 修改用户房间使用语言.
   */
  void updateUserLangCode(Long userId, String langCode);

  /**
   * 获取房间Id.
   */
  Long getUserRoomId(Long userId);

  /**
   * 修改房间成员数量设置.
   */
  void updateRoomSettingMemberCapacity(Long userId, Integer maxMember, Integer adminNumber);

  /**
   * 获取房间资料.
   */
  RoomProfileDTO getProfileById(Long roomId);

  /**
   * 获取资料详情.
   */
  RoomProfileManagerDTO getRoomProfileManagerById(Long roomId);

  /**
   * 获取房间资料-详情.
   */
  RoomProfileDTO getById(Long roomId);

  /**
   * 获取房间计数器.
   */
  RoomCounterDTO getRoomCounterByUserId(Long userId);

  /**
   * 获取用户房间资料.
   */
  RoomProfileDTO getProfileByUserId(Long userId);

  /**
   * 获取一批房间资料.
   */
  List<RoomProfileDTO> listProfileByIds(Set<Long> userIds);

  /**
   * 获取一组指定，房间资料.
   */
  Map<Long, RoomProfileDTO> mapProfileByRoomIds(Set<Long> roomIds);

  /**
   * 获取一组指定，房间资料(用户id).
   */
  Map<Long, RoomProfileDTO> mapProfileByUserIds(Set<Long> userIds);

  /**
   * 修改房间归属国家.
   */
  void updateUserCountry(Long userId, String countryCode, String countryName);

  /**
   * 房间资料列表(运营后台).
   */
  List<RoomProfileManagerDTO> listOps(RoomProfileOpsQryCmd qryCmd);

  /**
   * 修改资料.
   */
  Boolean updateSelectiveProfile(RoomProfileDTO roomProfile);

  /**
   * 移除用户角色缓存.
   */
  void removeCacheUserRole(Long userId, Long roomId);

  /**
   * 累计计数管理员.
   */
  void incrCounterAdmin(Long roomId);

  /**
   * 累计计数成员.
   */
  void incrCounterMember(Long roomId);

  /**
   * 减少计数管理员.
   */
  void decrCounterAdmin(Long roomId);

  /**
   * 减少计数成员.
   */
  void decrCounterMember(Long roomId);


  /**
   * 验证是否是房主.
   */
  boolean checkOwn(Long roomId, Long userId);

}
