package com.red.circle.other.infra.database.cache.service.other;

import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
import java.util.Set;

/**
 * 房间pk.
 *
 * @author pengshigang on 2021/9/25
 */
public interface GameRoomPkCacheService {

  /**
   * 房间内团队PK游戏 - 缓存基础信息.
   *
   * @param pkId id
   * @param data 数据
   */
  void cacheIndoorTeamPkBaseInfo(Long pkId, String data);

  /**
   * 房间内团队PK游戏 - 获取基础信息.
   *
   * @param pkId id
   * @return ignore
   */
  <T> T getIndoorTeamPkBaseInfo(Long pkId, Class<T> clazz);

  /**
   * 累计房间内团队PK中小队分数.
   *
   * @param pkId         id
   * @param belongTeam   归属队伍
   * @param giftIntegral 礼物积分
   */
  void indoorAccumulateTeamScore(Long pkId, String belongTeam, Long giftIntegral);

  /**
   * 累计房间内团队PK中小队各收礼人与分值.
   *
   * @param pkId         id
   * @param belongTeam   归属队伍
   * @param userId       收礼用户id
   * @param giftIntegral 礼物积分
   */
  void indoorAccumulateTeamRecipientScore(Long pkId, String belongTeam, Long userId,
      Long giftIntegral);

  /**
   * 累计房间内团队PK中小队各支持者与分值.
   *
   * @param pkId         id
   * @param belongTeam   归属队伍
   * @param userId       支持者用户id
   * @param giftIntegral 礼物积分
   */
  void indoorAccumulateTeamFansScore(Long pkId, String belongTeam, Long userId,
      Long giftIntegral);

  /**
   * 获得房间内团队PK-归属团队积分.
   *
   * @param pkId       id
   * @param belongTeam 团队
   * @return 积分
   */
  Long getBelongTeamIntegral(Long pkId, String belongTeam);

  /**
   * 获得房间内团队PK-归属团队前3名支持者用户id.
   *
   * @param pkId       id
   * @param belongTeam 团队
   * @return 积分
   */
  Set<String> getBelongTeamFanTopThreeUserIds(Long pkId, String belongTeam);

  /**
   * 获得房间内团队PK-归属团队具体粉丝积分.
   *
   * @param pkId       id
   * @param belongTeam 团队
   * @return 积分
   */
  Long getBelongTeamFansIntegral(Long pkId, String belongTeam, String userId);

  /**
   * 获得房间内团队PK-归属团队具体收礼人积分.
   *
   * @param pkId       id
   * @param belongTeam 团队
   * @return 积分
   */
  Long getBelongTeamRecipientIntegral(Long pkId, String belongTeam, String userId);

  /**
   * 获得房间内团队PK-归属团队第一名收礼者.
   *
   * @param pkId       id
   * @param belongTeam 团队
   * @return 积分
   */
  Long getBelongTeamMvpUserId(Long pkId, String belongTeam);

  /**
   * 缓存正在PK中的双方对战信息.
   *
   * @param pkId PK ID
   * @param data 数据
   */
  void cacheRoomPk(Long pkId, String data);

  /**
   * 获取正在PK中的双方对战信息.
   *
   * @param pkId PK ID
   * @return ignore
   */
  <T> T getRoomPk(Long pkId, Class<T> clazz);

  /**
   * 缓存上周信息.
   *
   * @param sysOrigin sysOrigin
   * @param data      数据
   */
  void cacheRoomPkLastWeek(SysOriginPlatformEnum sysOrigin, String data);

  /**
   * 获取上周信息.
   *
   * @param sysOrigin sysOrigin
   */
  <T> T getRoomPkLastWeek(SysOriginPlatformEnum sysOrigin, Class<T> clazz);

  /**
   * 缓存本周信息.
   *
   * @param sysOrigin sysOrigin
   * @param data      数据
   */
  void cacheRoomPkThisWeek(SysOriginPlatformEnum sysOrigin, String data);

  /**
   * 获取本周信息.
   *
   * @param sysOrigin sysOrigin
   */
  <T> T getRoomPkThisWeek(SysOriginPlatformEnum sysOrigin, Class<T> clazz);


}
