package com.yc.ship.module.trade.service.supplier;


import com.yc.ship.framework.common.pojo.CommonResult;
import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
import com.yc.ship.module.trade.dal.dataobject.supplier.SupplierRefundDO;
import com.yc.ship.module.trade.dal.dataobject.supplier.TradeSupplierOrderDO;
import com.yc.ship.module.trade.service.refund.bo.TradeRefundBO;
import com.yc.ship.module.trade.service.supplier.bo.SupplierRefundRespBO;
import com.yc.ship.module.trade.service.supplier.bo.SupplierTradeOrderPayRespBO;
import com.yc.ship.module.trade.service.supplier.bo.SupplierTradeOrderRespBO;
import com.yc.ship.module.trade.service.supplier.bo.TradeSupplierOrderBO;

/**
 * &#064;Description 供应商下单回调
 * &#064;Author qsl
 * &#064;Date 2025/6/4 15:03
 */
public interface TradeSupplierCallbackService {

    /**
     * 全部订单下单成功后处理
     * @param tradeOrderDO
     */
    void afterAllOrderCreate(TradeOrderDO tradeOrderDO);

    /**
     * 下单成功后处理
     * @param respBO
     */
    void afterOrderCreate(SupplierTradeOrderRespBO respBO, TradeSupplierOrderBO tradeSupplierOrderBO);
    /**
     * 下单失败后处理
     * @param tradeSupplierOrderBO
     */
    void afterOrderCreateFail(TradeSupplierOrderBO tradeSupplierOrderBO);

    /**
     * 任意下单失败后处理
     * @param tradeOrderDO
     */
    void afterAnyOrderCreateFail(TradeOrderDO tradeOrderDO);

    /**
     * 全部订单支付成功后处理
     * @param tradeOrderDO
     */
    void afterAllOrderPay(TradeOrderDO tradeOrderDO);

    /**
     * 支付成功后处理
     * @param respBO
     * @param tradeSupplierOrderDO
     */
    void afterOrderPaySuccess(SupplierTradeOrderPayRespBO respBO, TradeSupplierOrderDO tradeSupplierOrderDO);

    /**
     * 支付失败后处理
     * @param tradeSupplierOrderDO
     */
    void afterOrderPayFail(TradeSupplierOrderDO tradeSupplierOrderDO);

    /**
     * 任意支付失败后处理
     * @param tradeOrderDO
     */
    void afterAnyOrderPayFail(TradeOrderDO tradeOrderDO);

    /**
     * 支付前处理
     * @param tradeSupplierOrderDO
     */
    void beforeOrderPay(TradeSupplierOrderDO tradeSupplierOrderDO);

    /**
     * 任意退款失败后处理
     * @param tradeRefundBO
     */
    void afterAnyRefundFail(CommonResult<?> resp, TradeRefundBO tradeRefundBO);

    /**
     * 全部退款成功后处理
     * @param tradeRefundBO
     */
    void afterAllRefund(TradeRefundBO tradeRefundBO);

    /**
     * 下单失败后处理
     * @param resp
     * @param supplierRefundDO
     */
    void afterRefundFail(CommonResult<SupplierRefundRespBO> resp, SupplierRefundDO supplierRefundDO);

    /**
     * 退款成功后处理
     * @param respBO
     * @param supplierRefundDO
     */
    void afterRefundSuccess(SupplierRefundRespBO respBO,SupplierRefundDO supplierRefundDO);
}
