package com.red.circle.other.infra.database.mongo.service.game;

import com.red.circle.other.infra.database.mongo.entity.game.turntable.RoomTurntableGame;
import com.red.circle.other.infra.database.mongo.entity.game.turntable.RoomTurntableGameParticipatingUser;
import java.util.List;

/**
 * 房间转盘游戏.
 *
 * @author pengliang on 2021/3/19
 */
public interface RoomTurntableGameMongoService {

  /**
   * 创建游戏.
   *
   * @param game ignore
   */
  void create(RoomTurntableGame game);

  /**
   * 修改游戏状态.
   *
   * @param gameId     游戏id
   * @param gameStatus 状态
   */
  void updateGameStatus(Long gameId, String gameStatus);

  /**
   * 淘汰一组用户.
   *
   * @param gameId  游戏id
   * @param userIds 用户id
   */
  void weedOuts(Long gameId, List<Long> userIds);

  /**
   * 淘汰用户
   *
   * @param gameId 游戏id
   * @param userId 用户id
   */
  void weedOut(Long gameId, Long userId);

  /**
   * 中奖用户.
   *
   * @param gameId 游戏id
   * @param userId 用户id
   */
  void jackpot(Long gameId, Long userId);

  /**
   * 获取游戏记录.
   *
   * @param roomId 房间id
   * @return ignore
   */
  RoomTurntableGame getRoomTurntableGameByRoomId(Long roomId);

  /**
   * 是否存在游戏.
   *
   * @param gameId 游戏id
   * @return ignore
   */
  boolean existsByGameId(Long gameId);

  /**
   * 获取游戏记录.
   *
   * @param gameId 游戏id
   * @return ignore
   */
  RoomTurntableGame getRoomTurntableGameByGameId(Long gameId);

  /**
   * 获取游戏记录.
   *
   * @param gameId 游戏id
   * @return ignore
   */
  RoomTurntableGame getRoomTurntableGame(Long roomId, Long gameId);

  /**
   * 获取游戏用户.
   *
   * @param gameId 游戏id
   * @return ignore
   */
  List<RoomTurntableGameParticipatingUser> listParticipatingUser(Long gameId);

  /**
   * 加入游戏.
   *
   * @param participatingUsers 用户信息.
   * @return ignore
   */
  void join(RoomTurntableGameParticipatingUser participatingUsers);

  /**
   * 移除游戏.
   *
   * @param gameId 游戏id
   */
  void removeGame(Long gameId);
}
