package com.tmerclub.cloud.api.user.feign;

import com.tmerclub.cloud.api.payment.vo.ShopAccountDetailVO;
import com.tmerclub.cloud.api.user.bo.BalancePayBO;
import com.tmerclub.cloud.api.user.bo.BalanceRefundBO;
import com.tmerclub.cloud.api.user.dto.FinanceDetailDTO;
import com.tmerclub.cloud.api.user.vo.FinanceDetailExcelVO;
import com.tmerclub.cloud.api.user.vo.FinanceDetailVO;
import com.tmerclub.cloud.api.user.vo.UserPayInfoVO;
import com.tmerclub.cloud.common.database.vo.PageVO;
import com.tmerclub.cloud.common.response.ServerResponseEntity;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 充值信息
 *
 * @author tmerclub
 */
public interface UserBalanceLogFeignClient {

    /**
     * 获取充值金额
     *
     * @param balanceLogId 充值记录id
     * @return
     */
    ServerResponseEntity<Long> getPayAmount(Long balanceLogId);

    /**
     * 获取充值记录是否已经支付
     *
     * @param balanceLogId 充值记录id
     * @return
     */
    ServerResponseEntity<Integer> getIsPay(Long balanceLogId);


    /**
     * 余额支付记录
     *
     * @param balancePayBO 记录信息
     * @return
     */
    ServerResponseEntity<Void> insertBalancePayLog(BalancePayBO balancePayBO);

    /**
     * 余额退款记录 + 执行退款
     *
     * @param balanceRefundBO 记录信息
     * @return
     */
    ServerResponseEntity<Void> doRefund(BalanceRefundBO balanceRefundBO);

    /**
     * 分页获取余额充值财务对账信息
     *
     * @param financeDetailDTO
     * @return
     */
    ServerResponseEntity<PageVO<FinanceDetailVO>> pageFinanceDetail(FinanceDetailDTO financeDetailDTO);

    /**
     * 获取余额充值财务对账信息
     *
     * @param financeDetailDTO
     * @return
     */
    ServerResponseEntity<List<FinanceDetailExcelVO>> listFinanceDetail(FinanceDetailDTO financeDetailDTO);

    /**
     * 获取平台财务信息
     *
     * @param startTime
     * @param endTime
     * @return
     */
    ServerResponseEntity<ShopAccountDetailVO> getPlatformAccountDetail(Date startTime,
                                                                       Date endTime);

    /**
     * 获取用户充值，购买会员财务信息
     *
     * @param startTime
     * @param endTime
     * @param financeType
     * @param pageSize
     * @param pageNum
     * @return
     */
    ServerResponseEntity<PageVO<UserPayInfoVO>> pageUserPayInfo(Date startTime,
                                                                Date endTime,
                                                                Integer financeType,
                                                                Integer pageSize,
                                                                Integer pageNum);

    /**
     * 获取用户充值，购买会员财务信息
     *
     * @param startTime
     * @param endTime
     * @param financeType
     * @return
     */
    ServerResponseEntity<List<UserPayInfoVO>> listUserPayInfo(Date startTime,
                                                              Date endTime,
                                                              Integer financeType);

    /**
     * 扣减用户余额，更新余额支付记录为支付成功
     *
     * @param payId
     * @return
     */
    ServerResponseEntity<Void> updateToOrderPaySuccess(Long payId);

    /**
     * 出售球杆更新用户余额
     *
     * @param userId 用户id
     * @param money  金额（单位分）
     * @return 结果
     */
    ServerResponseEntity<Void> sellCueUpdateBalance(Long userId, Long money);
}
