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

import com.red.circle.common.business.dto.cmd.app.AppRoomIdCmd;
import com.red.circle.live.app.dto.clientobject.LiveMicUserCO;
import com.red.circle.live.app.dto.cmd.HeartbeatUploadCmd;
import com.red.circle.live.app.dto.cmd.LiveMusicStatusCmd;
import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
import java.util.List;
import java.util.Map;

/**
 * 直播房间用户.
 *
 * @author pengliang on 2023/12/8
 */
public interface LiveRoomUserService {

  /**
   * 获取房间说话的用户列表.
   */
  List<LiveMicUserCO> listSpeakUser(AppRoomIdCmd cmd);

  /**
   * 获取房间用户列表.
   */
  List<LiveMicUserCO> listUser(AppRoomIdCmd cmd);

  /**
   * 心跳.
   */
  void heartbeat(HeartbeatUploadCmd cmd);

  /**
   * 退出房间.
   */
  void quitRoom(AppRoomIdCmd cmd);

  /**
   * 音乐播放状态.
   */
  Map<String,Object> musicStatus(LiveMusicStatusCmd cmd);

  /**
   * 移除房间正在播放音乐用户.
   */
  void removeMusic(AppRoomIdCmd cmd);

  /**
   * 正在播放音乐用户.
   */
  UserProfileDTO getMusicUserProfile(AppRoomIdCmd cmd);

  /**
   * 获取房间主播列表.
   */
  List<Long> channelHost(AppRoomIdCmd cmd);
}
