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

import com.red.circle.framework.dto.PageResult;
import com.red.circle.other.infra.database.mongo.entity.activity.AgentActivityCount;
import com.red.circle.other.inner.enums.activity.AgentActivityCountType;
import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * 代理活动.
 *
 * @author pengshigang on 2023/5/25
 */
public interface AgentActivityCountService {

  /**
   * 增加代理积分.
   *
   * @param teamId   团队
   * @param target   目标值
   * @param regionId 区域ID
   */
  void incrTarget(Long teamId, Long target, String regionId);

  /**
   * 减少代理积分.
   */
  void reduceTarget(Collection<Long> teamIds, Long target);

  /**
   * 删除代理积分.
   */
  void removeByTeamIds(Collection<Long> teamIds);

  /**
   * 修改状态为历史top用户.
   */
  void updateHistoryTopUserByIds(Set<String> ids);


  /**
   * 获得历史的最近33个top团队.
   *
   * @param regionId 区域Id
   * @param group    月周
   */
  List<AgentActivityCount> historyLimit33(String regionId, String group);

  /**
   * 正在比赛中的15个top团队.
   *
   * @param regionId 区域Id
   * @param group    月周
   */
  List<AgentActivityCount> listTop15(String regionId, String group);

  /**
   * 自己的数据
   *
   * @param teamId 团队
   * @param group  月周
   */
  AgentActivityCount own(Long teamId, String group);

  /**
   * 取消用户top标识.
   */
  void updateCancelUserTop(String id);

  /**
   * 分页数据
   *
   * @param group      类型
   * @param regionId   区域ID
   * @param pageNumber 每页多少条
   * @param pageSize   第几页
   */
  PageResult<AgentActivityCount> pageData(AgentActivityCountType group, String regionId,
      Integer pageNumber, Integer pageSize);


  /**
   * 获得奖励团队.
   *
   * @param group MONTH/WEEK
   */
  List<AgentActivityCount> top10Team(String group, String regionId);

  /**
   * 修改为历史状态.
   */
  void updateHistory(String group);

}
