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


import com.red.circle.common.business.dto.cmd.AppExtCommand;
import com.red.circle.common.business.dto.cmd.app.AppIdLongCmd;
import com.red.circle.other.app.dto.clientobject.activity.ActivityUserRewardPropsCO;
import com.red.circle.other.app.dto.clientobject.activity.InviteActivityCO;
import com.red.circle.other.app.dto.clientobject.activity.InviteActivityCO.InviteActivityInfoCO;
import com.red.circle.other.app.dto.clientobject.activity.InviteUserActivitySummaryCO;
import com.red.circle.other.app.dto.clientobject.activity.InviteUserCO;
import com.red.circle.other.app.dto.clientobject.activity.InviteUserCommissionDetailsCO;
import com.red.circle.other.app.dto.cmd.activity.InviteUserActivityLimitCmd;
import com.red.circle.other.app.dto.cmd.activity.BindInviteCodeCmd;
import com.red.circle.other.app.dto.clientobject.activity.InviteCodeCO;
import com.red.circle.other.app.dto.clientobject.activity.InviteIncomeStatisticsCO;
import com.red.circle.other.app.dto.clientobject.activity.MyInviterInfoCO;
import com.red.circle.other.app.dto.clientobject.activity.ValidInviteUserCO;
import java.util.List;

/**
 * <p>
 * 邀请用户注册活动 .
 * </p>
 *
 * @author pengshigang
 * @since 2022-05-24
 */
public interface InviteUserActivityService {

  InviteUserActivitySummaryCO getSummary(AppExtCommand cmd);

  /**
   * 邀请用户列表.
   */
  List<InviteUserCO> listInviteUser(InviteUserActivityLimitCmd cmd);

  /**
   * 赚取的佣金明细.
   */
  List<InviteUserCommissionDetailsCO> listUserCommissionDetails(InviteUserActivityLimitCmd cmd);

  /**
   * 消耗活动奖励池
   */
  List<ActivityUserRewardPropsCO> listRewardPool(AppExtCommand cmd);

  /**
   * 领取奖励
   */
  void receiveAward(AppIdLongCmd cmd);

  /**
   * 邀请活动
   */
  InviteActivityCO inviteActivity(AppExtCommand cmd);

  /**
   * 提取.
   */
  void extract(AppExtCommand cmd);

  /**
   * 已提取列表.
   */
  List<InviteActivityInfoCO> extractList(AppExtCommand cmd);

  /**
   * 获取我的邀请码.
   */
  InviteCodeCO getMyInviteCode(AppExtCommand cmd);

  /**
   * 绑定邀请码.
   */
  void bindInviteCode(BindInviteCodeCmd cmd);

  /**
   * 邀请收益统计.
   */
  InviteIncomeStatisticsCO getIncomeStatistics(AppExtCommand cmd);

  /**
   * 有效邀请用户列表.
   */
  List<ValidInviteUserCO> getValidInviteUsers(AppExtCommand cmd);

  /**
   * 获取我的邀请人信息.
   */
  MyInviterInfoCO getMyInviterInfo(AppExtCommand cmd);
}
