package com.cool.store.service.fees;

import com.cool.store.dto.wallet.AccountTransferDTO;
import com.cool.store.request.fees.WalletCancelPayRequest;
import com.cool.store.request.fees.WalletPayRequest;
import com.cool.store.request.fees.WalletRepayRequest;
import com.cool.store.vo.fees.WalletPayInfoVO;

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

/**
 * <p>
 * 钱包加盟缴费服务类
 * </p>
 *
 * @author wangff
 * @since 2026/1/30
 */
public interface WalletPayInfoService {

    /**
     * 支付
     * @param request 钱包支付Request
     * @param oldPayNo 重新支付订单号
     * @return 是否成功
     */
    Boolean pay(WalletPayRequest request, String oldPayNo);

    /**
     * 查询并更新批量支付结果
     * @param batchCode 批次编号
     */
    void queryAndUpdateBatchTransferStatus(String batchCode);

    /**
     * 重新支付
     * @param request 钱包重新支付Request
     * @return 是否成功
     */
    Boolean rePay(WalletRepayRequest request);

    /**
     * 取消支付
     * @param request 钱包取消支付Request
     * @return 是否成功
     */
    Boolean cancelPay(WalletCancelPayRequest request);

    /**
     * 根据门店id查询缴费信息列表
     * @param shopId 门店id
     * @return 钱包加盟缴费信息VO列表
     */
    List<WalletPayInfoVO> payInfoList(Long shopId, Integer payStatus);

    /**
     * 重新推送账单到新管家
     * @param walletPayInfoId 支付信息
     */
    void rePushReceipt(Long walletPayInfoId);

    /**
     * 账户间转账
     * @param expenseType
     * @param amount
     * @param inAccNo
     * @param outAccNo
     * @param payNo
     * @param remark
     * @return
     */
    AccountTransferDTO accountPay(String expenseType, BigDecimal amount, String inAccNo, String outAccNo, String payNo, String remark);
}
