package cn.pluss.platform.channel;

import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.suixingfu.SxfConstants;
import com.alibaba.fastjson.JSONObject;
import org.springframework.scheduling.annotation.Async;

/**
 * 机具操作回调数据处理
 * @author DJH
 */
public interface MchMachineCallbackService {

    String OPERATION_PAY = "operationPay";
    String OPERATION_REFUND = "operationRefund";



    /**
     * 机具操作回调数据处理
     * @param param 回调参数
     */
    @Async
    default void orderCallback(JSONObject param) {
        if (param.getString("ordNo") != null && param.getString("ordNo").startsWith("SXF")) {
            // SXF开头的订单，并不是机具回调的订单
            return;
        }

        String operationType = getOperationType(param);
        if (operationType == null) {
            throw new MsgException("未知操作");
        }

        switch (operationType) {
            case OPERATION_PAY:
                payCallback(param);
                break;
            case OPERATION_REFUND:
                refundCallback(param);
                break;
            case SxfConstants.SXF_POS_OPERATION:
                posCallback(param);
            default:
                break;
        }
    }
    /**
     * @description:pos 机相关操作
     * @date: 2021/10/28 10:24
     * @param param:
     */
    void posCallback(JSONObject param);

    /**
     * 操作类型判断
     * @param param 参数
     * @return  参数类型，OPERATION_PAY 或者 OPERATION_REFUND
     */
    String getOperationType(JSONObject param);

    /**
     * 支付回调操作
     * @param param 参数
     */
    void payCallback(JSONObject param);

    /**
     * 退款回调操作
     * @param param 参数
     */
    void refundCallback(JSONObject param);
}
