package com.yn.bftl.thirdparty.modules.unionpay.service;

import com.yn.bftl.common.modules.account.dto.AccountUpdateDTO;
import com.yn.bftl.common.modules.account.dto.PaymentDTO;
import com.yn.bftl.common.modules.account.dto.RechargeDTO;
import com.yn.bftl.common.modules.account.entity.Account;
import com.yn.bftl.common.modules.account.vo.AccountPaymentsVO;
import com.yn.bftl.common.modules.account.vo.WithdrawalsVO;

import java.math.BigDecimal;

/**
 * 电子账户服务
 *
 * @author huabiao
 * @create 2022/9/7  9:23
 **/
public interface UnionpayAccountService {

    /**
     * 充值
     *
     * @param rechargeDTO 充值实体
     * @return 是否充值成功
     */
    boolean rechargeMoney(RechargeDTO rechargeDTO);

    /**
     * 账户-更新余额
     *
     * @param accountUpdateDTO
     * @return
     */
    boolean accountUpdate(AccountUpdateDTO accountUpdateDTO);

    /**
     * 转账后续处理
     *
     * @param amount
     * @param inputAccount
     * @param outputAccount
     * @param transferResult
     */
    void transferHandle(BigDecimal amount, Account inputAccount, Account outputAccount, AccountPaymentsVO transferResult);

    /**
     * 提现后续处理
     *
     * @param account
     * @param withdrawalsVO
     */
    void withdrawalsHandle(Account account, WithdrawalsVO withdrawalsVO);

    /**
     * 银联信用还款处理
     *
     * @param paymentDTO
     * @param saleCompanyId
     * @param transferResult
     */
    void unionpayCreditRefundHandle(PaymentDTO paymentDTO, Long saleCompanyId, AccountPaymentsVO transferResult);

    /**
     * 获取账户更新锁key
     *
     * @param accountId
     * @return
     */
    String getAccountUpdateLockKey(Long accountId);
}
