package com.red.circle.other.inner.endpoint.user.user.api;

import com.red.circle.framework.dto.PageResult;
import com.red.circle.framework.dto.ResultResponse;
import com.red.circle.other.inner.model.cmd.user.invite.InviteBalancePageQryCmd;
import com.red.circle.other.inner.model.cmd.user.invite.InviteCarouselAwardsCmd;
import com.red.circle.other.inner.model.cmd.user.invite.InviteConfigCmd;
import com.red.circle.other.inner.model.cmd.user.invite.InviteRedPacketDrawLogPageQryCmd;
import com.red.circle.other.inner.model.cmd.user.invite.InviteRedPacketHelpLogPageQryCmd;
import com.red.circle.other.inner.model.cmd.user.invite.InviteRedPacketPageQryCmd;
import com.red.circle.other.inner.model.cmd.user.invite.InviteTargetTransitBalanceCmd;
import com.red.circle.other.inner.model.dto.user.invite.InviteBalanceDTO;
import com.red.circle.other.inner.model.dto.user.invite.InviteCarouselAwardsBackDTO;
import com.red.circle.other.inner.model.dto.user.invite.InviteConfigDTO;
import com.red.circle.other.inner.model.dto.user.invite.InviteRedPacketDTO;
import com.red.circle.other.inner.model.dto.user.invite.InviteRedPacketDrawLogDTO;
import com.red.circle.other.inner.model.dto.user.invite.InviteRedPacketHelpLogDTO;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 用户红包邀新服务.
 *
 * @author pengshigang on 2024/01/05
 */
public interface UserRedPacketInviteNewClientApi {

  String API_PREFIX = "/user/red-packet/invite-new/client";

  /**
   * 邀请新用户-目标中转账户-分页.
   */
  @PostMapping("/pageTargetTransitBalance")
  ResultResponse<PageResult<InviteBalanceDTO>> pageTargetTransitBalance(
      @RequestBody InviteBalancePageQryCmd cmd);

  /**
   * 邀请新用户-扣除目标.
   */
  @PostMapping("/reduceTarget")
  ResultResponse<Void> reduceTarget(@RequestBody InviteTargetTransitBalanceCmd cmd);

  /**
   * 邀请新用户-美元中转账户-分页.
   */
  @PostMapping("/pageWithdrawTransitBalance")
  ResultResponse<PageResult<InviteBalanceDTO>> pageWithdrawTransitBalance(
      @RequestBody InviteBalancePageQryCmd cmd);

  /**
   * 邀请新用户-红包抽奖记录-分页.
   */
  @PostMapping("/pageRedPacketDrawLog")
  ResultResponse<PageResult<InviteRedPacketDrawLogDTO>> pageRedPacketDrawLog(
      @RequestBody InviteRedPacketDrawLogPageQryCmd cmd);

  /**
   * 邀请新用户-助力记录-分页.
   */
  @PostMapping("/pageRedPacketHelpLog")
  ResultResponse<PageResult<InviteRedPacketHelpLogDTO>> pageRedPacketHelpLog(
      @RequestBody InviteRedPacketHelpLogPageQryCmd cmd);

  /**
   * 邀请新用户-红包记录-分页.
   */
  @PostMapping("/pageRedPacket")
  ResultResponse<PageResult<InviteRedPacketDTO>> pageRedPacket(
      @RequestBody InviteRedPacketPageQryCmd cmd);

  /**
   * 邀请新用户-转盘奖项列表.
   */
  @GetMapping("/listCarouselAwards")
  ResultResponse<List<InviteCarouselAwardsBackDTO>> listCarouselAwards(
      @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 邀请新用户-转盘奖项-保存.
   */
  @PostMapping("/saveCarouselAwards")
  ResultResponse<Void> saveCarouselAwards(@RequestBody InviteCarouselAwardsCmd cmd);

  /**
   * 邀请新用户-删除转盘奖项.
   */
  @GetMapping("/deleteCarouselAwards")
  ResultResponse<Void> deleteCarouselAwards(@RequestParam("id") Long id);

  /**
   * 邀请新用户-配置.
   */
  @GetMapping("/getConfigBySysOrigin")
  ResultResponse<InviteConfigDTO> getConfigBySysOrigin(@RequestParam("sysOrigin") String sysOrigin);

  /**
   * 邀请新用户-配置-保存.
   */
  @PostMapping("/saveConfig")
  ResultResponse<Void> saveConfig(@RequestBody InviteConfigCmd cmd);

}
