package com.red.circle.other.app.inner.service.user.user;

import com.red.circle.framework.dto.PageResult;
import com.red.circle.other.inner.model.cmd.user.InviteUserQryCmd;
import com.red.circle.other.inner.model.cmd.user.SysInviteUserConfigCmd;
import com.red.circle.other.inner.model.cmd.user.UserInviteRewardQryCmd;
import com.red.circle.other.inner.model.dto.user.InviteUserRechargeCommissionDTO;
import com.red.circle.other.inner.model.dto.user.InviteUserRegisterDTO;
import com.red.circle.other.inner.model.dto.user.InviteUserRewardRecordDTO;
import com.red.circle.other.inner.model.dto.user.InviteUserSummaryDTO;
import com.red.circle.other.inner.model.dto.user.PageInviteUserRegisterDTO;
import com.red.circle.other.inner.model.dto.user.SysInviteUserConfigDTO;
import java.math.BigDecimal;
import java.util.List;

/**
 * 邀请用户.
 *
 * @author pengliang on 2023/8/18
 */
public interface InviteUserClientService {

  /**
   * 被邀请人充值邀请人获得佣金.
   */
  void processRechargeCommission(BigDecimal rechargeAmount, String sysOrigin, Long inviteUserId);

  /**
   * 获得用户邀请用户注册分页数据
   *
   * @param pageNumber 第几页
   * @param userId     邀请人用户id
   * @return 被邀请人信息
   */
  List<InviteUserRegisterDTO> pageInviteUserRegister(Integer pageNumber, Long userId);

  /**
   * 获取邀请用户充值佣金与数量累计
   *
   * @param userId 用户id
   * @return 邀请用户充值佣金与数量累计
   */
  InviteUserSummaryDTO getInviteUserSummary(Long userId);

  /**
   * 获得已领取的奖励规则id集合
   */
  String getRewardsReceivedRuleIds(Long userId);

  /**
   * 保存已领取的奖励规则id集合
   */
  void setRewardsReceivedRuleIds(Long userId, String list);

  /**
   * 获得邀请用户充值佣金分页数据
   *
   * @param pageNumber   第几页
   * @param inviteUserId 被邀请人用户id
   */
  List<InviteUserRechargeCommissionDTO> pageInviteUserRechargeCommission(Integer pageNumber,
      Long inviteUserId);

  /**
   * 获取被邀请人用户id
   *
   * @param inviteUserId 被邀请用户
   * @return 用户id
   */
  Long getUserIdByInviteUserId(Long inviteUserId);

  /**
   * 添加邀请，奖励记录.
   */
  void addRewardRecord(InviteUserRewardRecordDTO dto);

  /**
   * 邀请用户奖励分页列表.
   */
  PageResult<InviteUserRewardRecordDTO> getUserInviteRewardRecord(UserInviteRewardQryCmd query);

  /**
   * 分页查询用户邀请用户注册信息
   */
  PageResult<PageInviteUserRegisterDTO> pageInviteUserRegisterAll(InviteUserQryCmd query);

  /**
   * 修改邀请用户规则
   */
  void updateConfig(SysInviteUserConfigCmd config);

  /**
   * 获得邀请用户规则
   */
  SysInviteUserConfigDTO getConfig(String sysOrigin);
}
