package com.red.circle.other.app.service.game;

import com.red.circle.common.business.dto.cmd.AppExtCommand;
import com.red.circle.common.business.dto.cmd.app.AppIdLongCmd;
import com.red.circle.common.business.dto.cmd.app.AppRoomIdCmd;
import com.red.circle.other.app.dto.clientobject.game.GameKtvCO;
import com.red.circle.other.app.dto.clientobject.game.GameKtvClickedSongCO;
import com.red.circle.other.app.dto.clientobject.game.GameKtvUserProfileCO;
import com.red.circle.other.app.dto.cmd.game.GameKtvClickSongCmd;
import com.red.circle.other.app.dto.cmd.game.GameKtvRemoveSongCmd;
import java.util.List;
import java.util.Map;

/**
 * ktv游戏.
 *
 * @author pengshigang on 2023/5/6
 */
public interface GameKtvService {

  /**
   * 获得倒计时.
   */
  Map<String, Long> getCountDown(AppRoomIdCmd cmd);

  /**
   * 获得ktv基础数据.
   */
  GameKtvCO getKtvData(AppRoomIdCmd cmd);

  /**
   * 获得ktv已点歌曲.
   */
  List<GameKtvClickedSongCO> listKtvClickedSongs(AppRoomIdCmd cmd);

  /**
   * 周榜单.
   */
  List<GameKtvUserProfileCO> listWeekRank(AppExtCommand cmd);

  /**
   * 点歌.
   */
  void clickSong(GameKtvClickSongCmd cmd);

  /**
   * 歌曲置顶.
   */
  void songTop(AppIdLongCmd cmd);

  /**
   * 结束歌曲.
   */
  void songEnd(AppIdLongCmd cmd);

  /**
   * 开始播放歌曲.
   */
  void songPlay(AppIdLongCmd cmd);

  /**
   * 删除歌曲.
   */
  void removeSongs(GameKtvRemoveSongCmd cmd);

  /**
   * 删除歌曲.
   */
  void delWaitSong(AppIdLongCmd cmd);

}
