package com.red.circle.wallet.app.service;

import com.red.circle.common.business.dto.cmd.AppExtCommand;
import com.red.circle.framework.core.dto.CommonCommand;
import com.red.circle.other.inner.model.dto.user.SysExchangeGoldTipDTO;
import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
import com.red.circle.wallet.app.dto.clientobject.UserBankCheckExchangeGoldCO;
import com.red.circle.wallet.app.dto.clientobject.UserBankCheckTransferCO;
import com.red.circle.wallet.app.dto.clientobject.UserBankCheckWithdrawCO;
import com.red.circle.wallet.app.dto.clientobject.UserBankExchangeGoldResultCO;
import com.red.circle.wallet.app.dto.clientobject.UserBankWaterCO;
import com.red.circle.wallet.app.dto.clientobject.UserBankWithdrawResultCO;
import com.red.circle.wallet.app.dto.cmd.UserBankExchangeGoldCmd;
import com.red.circle.wallet.app.dto.cmd.UserBankSearchUserProfileCmd;
import com.red.circle.wallet.app.dto.cmd.UserBankWithdrawCmd;
import com.red.circle.wallet.app.dto.cmd.UserBankWithdrawTransferCmd;
import java.math.BigDecimal;
import java.util.List;

/**
 * 用户银行账户服务.
 *
 * @author pengliang on 2023/2/20
 */
public interface UserBankService {

  /**
   * 获取用户余额.
   */
  BigDecimal getBalance(AppExtCommand cmd);

  /**
   * 获取流水详情.
   */
  List<UserBankWaterCO> listDetails(AppExtCommand cmd);

  /**
   * 兑换金币.
   */
  UserBankExchangeGoldResultCO exchangeGold(UserBankExchangeGoldCmd cmd);

  /**
   * 提现.
   */
  UserBankWithdrawResultCO withdraw(UserBankWithdrawCmd cmd);

  /**
   * 钻石提现.
   */
  UserBankWithdrawResultCO diamondWithdraw(UserBankWithdrawCmd cmd);

  /**
   * 转账.
   */
  UserBankWithdrawResultCO transfer(UserBankWithdrawTransferCmd cmd);

  /**
   * 转账到金币.
   */
  UserBankWithdrawResultCO transferGold(UserBankWithdrawTransferCmd cmd);

  /**
   * 钻石转账.
   */
  UserBankWithdrawResultCO diamondTransfer(UserBankWithdrawTransferCmd cmd);

  /**
   * 提现检查.
   */
  UserBankCheckWithdrawCO checkWithdraw(AppExtCommand cmd);

  /**
   * 兑换金币检查.
   */
  UserBankCheckExchangeGoldCO checkExchangeGold(CommonCommand cmd);

  /**
   * 转账检查.
   */
  UserBankCheckTransferCO checkTransfer(AppExtCommand cmd);

  /**
   * 搜索用户.
   */
  UserProfileDTO searchUserProfile(UserBankSearchUserProfileCmd cmd);

  /**
   * 获得获得区域银行钱包兑换金币比例列表.
   */
  List<SysExchangeGoldTipDTO> listRegionExchangeGoldTip(AppExtCommand cmd);

  /**
   * 获得获得区域银行钱包工资钻石兑换金币比例列表.
   */
  List<SysExchangeGoldTipDTO> listRegionExchangeDiamondGoldTip(AppExtCommand cmd);

  /**
   * 获得获得区域银行钱包工资钻石兑换金币比例列表.
   */
  List<SysExchangeGoldTipDTO> listRegionWithdrawTip(AppExtCommand cmd);

  /**
   * 提现方式列表.
   */
  List<String> withdrawalWays(AppExtCommand cmd);

  /**
   * 提现美金手续费
   */
  Long serviceCharge(AppExtCommand cmd);
}
