package com.yc.ship.module.trade.service.order.handler;



import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
import com.yc.ship.module.trade.service.order.bo.TradeOrderBO;

import java.math.BigDecimal;

/**
 * &#064;Description 提供订单生命周期钩子接口；订单创建前、订单创建后、订单支付后、订单取消
 * &#064;Author qsl
 * &#064;Date 2025/6/4 16:16
 */
public interface TradeOrderHandler {

    /**
     * 账单,未还账禁止下单
     */
    int BILL = 2;
    /**
     * 营销政策，此处要重置支付金额，要先执行
     */
    int MARKETING = 3;

    /**
     * 优惠券
     */
    int COUPON = 4;
    /**
     * 定向库存
     */
    int DIRECT_STOCK = 5;

    /**
     * 初定扣库存
     */
    int PRE_ORDER_STOCK = 9;
    /**
     * 扣库存
     */
    int ORDER_STOCK = 10;
    /**
     * 通知
     */
    int ORDER_NOTIFY = 15;
    /**
     * 保险
     */
    int INSURANCE = 20;
    /**
     * 合同
     */
    int CONTRACT = 20;

    /**
     * 计调
     */
    int DISPATCH = 25;

    /**
     * 消息
     */
    int MESSAGE = 30;

    /**
     * 统计
     */
    int STATISTIC = 40;

    /**
     * 改签订单
     */
    int CHANGE_ORDER = 45;
    /**
     * 短信
     */
    int SMS_ORDER = 45;
    /**
     * 通用
     */
    int COMMON = 99;

    /**
     * 订单创建前
     *
     * @param order 订单
     */
    default void beforeOrderCreate(TradeOrderBO order) throws Exception {}

    /**
     * 订单创建后
     *
     * @param order 订单
     */
    default void afterOrderCreate(TradeOrderBO order) {}
    default void afterOrderModify(TradeOrderBO order) {}

    /**
     * 订单取消后
     *
     * @param tradeOrderDO 订单
     */
    default void afterCancelOrder(TradeOrderDO tradeOrderDO) {}

    /**
     * 订单创建失败
     *
     * @param order 订单
     */
    default void afterOrderCreateFail(TradeOrderBO order) {}

    /**
     * 供应商订单创建失败
     *
     * @param tradeOrderDO 订单
     */
    default void afterSupplierOrderCreateFail(TradeOrderDO tradeOrderDO) {}

    /**
     * 出票后
     *
     * @param tradeOrderDO 订单
     */
    default void afterProcessSuccess(TradeOrderDO tradeOrderDO) {}

    /**
     * 出票失败后
     * @param tradeOrderDO
     */
    default void afterProcessFail(TradeOrderDO tradeOrderDO) {}


    /**
     * 订单退款后
     *
     * @param refundId
     */
    default void afterRefundOrder(Long refundId) {}

    /**
     * 退款之后
     * @param orderId
     * @param refundAmount
     */
    default void afterRefundAmountSuccess(Long orderId,Long refundId,BigDecimal refundAmount) {}

    /**
     * 检票之后
     * @param orderId
     */
    default void afterCheckSuccess(Long orderId) {}

    /**
     * 订单创建成功后处理
     * @param tradeOrderDO
     */
    default void processOrderCreateSuccess(TradeOrderDO tradeOrderDO) {}


}
