package com.red.circle.console.app.service.app.user;

import com.red.circle.console.app.dto.clienobject.user.UserBankBalanceCO;
import com.red.circle.console.app.dto.clienobject.user.UserBankRunningWaterCO;
import com.red.circle.console.app.dto.clienobject.user.UserBankWithdrawGoldApplyCO;
import com.red.circle.console.app.dto.clienobject.user.UserBankWithdrawMoneyApplyCO;
import com.red.circle.framework.core.dto.CommonCommand;
import com.red.circle.wallet.inner.model.cmd.ApprovalMoneyApplyCmd;
import com.red.circle.wallet.inner.model.cmd.UserBankBalanceQryCmd;
import com.red.circle.wallet.inner.model.cmd.UserBankMoneyCmd;
import com.red.circle.wallet.inner.model.cmd.UserBankRunningWaterQryCmd;
import com.red.circle.wallet.inner.model.cmd.UserBankTransferCmd;
import com.red.circle.wallet.inner.model.cmd.UserBankWithdrawGoldApplyQryCmd;
import com.red.circle.wallet.inner.model.cmd.UserBankWithdrawMoneyApplyExportQryCmd;
import com.red.circle.wallet.inner.model.cmd.UserBankWithdrawMoneyApplyQryCmd;
import jakarta.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;

/**
 * 用户银行账户 服务.
 *
 * @author pengshigang on 2023/2/16
 */
public interface UserBankBalanceBackService {

  /**
   * 查询用户银行账户余额.
   */
  List<UserBankBalanceCO> listUserBankBalance(UserBankBalanceQryCmd query);

  /**
   * 导出余额列表.
   */
  void exportUserBankBalance(HttpServletResponse response, String sysOrigin);

  /**
   * 用户银行账户余额余额.
   */
  BigDecimal getBankBalance(Long userId);

  /**
   * 用户银行流水.
   */
  List<UserBankRunningWaterCO> pageUserBankRunningWater(UserBankRunningWaterQryCmd query);

  /**
   * 计算流水金额.
   */
  String calculateTotal(UserBankRunningWaterQryCmd query);

  /**
   * 发送现金.
   */
  void sendMoney(UserBankMoneyCmd param);

  /**
   * 创建用户银行现金账户.
   */
  void createBankBalance(UserBankMoneyCmd param);

  /**
   * 扣除现金.
   */
  void deductMoney(UserBankMoneyCmd param);

  /**
   * 现金转账.
   */
  void transferMoney(UserBankTransferCmd param);

  /**
   * 用户银行卡提现金币申请记录.
   */
  List<UserBankWithdrawGoldApplyCO> pageUserBankWithdrawGoldApply(
      UserBankWithdrawGoldApplyQryCmd query);

  /**
   * 用户银行卡现金提现申请.
   */
  List<UserBankWithdrawMoneyApplyCO> pageUserBankWithdrawMoneyApply(
      UserBankWithdrawMoneyApplyQryCmd query);

  /**
   * 用户银行卡现金提现申请-导出.
   */
  void exportUserBankWithdrawMoneyApply(
      HttpServletResponse response, UserBankWithdrawMoneyApplyExportQryCmd query);

  /**
   * 用户银行卡现金提现申请记录.
   */
  UserBankWithdrawMoneyApplyCO getUserBankWithdrawMoneyApply(Long id);

  /**
   * 审核提现申请记录.
   */
  void approvalMoneyApply(ApprovalMoneyApplyCmd param);

  /**
   * 导入工资列表.
   */
  void importUserBankBalance(MultipartFile file, CommonCommand param);
}
