package com.liquidnet.service.goblin.service;

import com.liquidnet.service.goblin.param.shouqianba.callback.CallbackParams;
import com.liquidnet.service.goblin.param.shouqianba.request.*;
import com.liquidnet.service.goblin.param.shouqianba.response.data.*;

import java.util.List;

/**
 * 收钱吧对接接口定义
 *
 * @author liquidnet
 * @since 2026-03-16
 */
public interface IGoblinShouQianBaService {

    /**
     * 创建结算明细
     * <p>
     * 对接收钱吧「创建结算明细」接口，向收钱吧上传订单结算数据。
     * </p>
     *
     * @param request 创建结算明细请求参数
     * @return 收钱吧响应结果；调用失败时返回 null
     */
    SettlementCreateData createSettlement(SettlementCreateRequest request);

    /**
     * 创建订单
     * 
     * @param request
     * @return
     */
    OrderCreateData createOrder(OrderCreateRequest request);

    /**
     * 创建收单
     * 如果上一步创建收单失败 可以使用这个接口重新创建收单
     * 
     * @return
     */
    AcquiringCreateData createAcquiring(AcquiringCreateRequest request);

    /**
     * 查询收银台
     * 
     * @param request
     * @return
     */
    CashierQueryData queryCashier(CashierQueryRequest request);

    /**
     * 创建微信预支付订单
     * 
     * @param request
     * @return
     */
    CreateWechatPrepayOrderData createWechatPrepayOrder(CreateWechatPrepayOrderRequest request);

    /**
     * 查询券码
     * 
     * @param request
     * @return
     */
    CouponQueryData queryCoupon(CouponQueryRequest request);

    /**
     * 券码状态同步
     * 
     * @param request
     * @return
     */
    boolean syncCouponStatus(CouponStatusSyncRequest request);

    /**
     * 券退款
     * 
     * @param request
     * @return
     */
    CouponRefundData refundCoupon(CouponRefundRequest request);

    /**
     * 商城列表接口
     *
     * @param request
     * @return
     */
    List<MallListQueryData> queryMallList(MallListQueryRequest request);

    /**
     * 商城商品接口
     *
     * @param request
     * @return
     */
    List<MallProductsQueryData> queryMallProducts(MallProductsQueryRequest request);

    /**
     * 验签
     * @param callbackParams
     * @return
     */
    boolean verifySignature(CallbackParams callbackParams);
}
