package com.haha.service.payment.payscore;

import com.haha.common.enums.PaymentChannel;
import java.util.Map;

/**
 * 支付分策略接口
 * 支付分（先享后付）与普通即时支付生命周期不同，独立定义策略接口
 */
public interface PayScoreStrategy {

    /**
     * 获取支持的支付渠道
     */
    PaymentChannel getChannel();

    /**
     * 创建支付分服务订单
     */
    PayScoreResult createServiceOrder(PayScoreCreateRequest request);

    /**
     * 完结服务订单（触发自动扣款）
     */
    PayScoreResult completeServiceOrder(PayScoreCompleteRequest request);

    /**
     * 取消服务订单
     */
    PayScoreResult cancelServiceOrder(PayScoreCancelRequest request);

    /**
     * 查询服务订单
     */
    PayScoreResult queryServiceOrder(String outOrderNo);

    /**
     * 修改订单金额（仅 USER_PAYING 状态可调用，仅可下调）
     */
    PayScoreResult modifyServiceOrder(PayScoreModifyRequest request);

    /**
     * 同步订单信息（用户已通过其他方式支付时，同步给微信停止扣款）
     */
    PayScoreResult syncServiceOrder(PayScoreSyncRequest request);

    /**
     * 发起支付扣款（创单结单）
     * 在服务完结后调用，触发微信支付分扣款，成功后 /pay/refund 才能使用
     */
    PayScoreResult payServiceOrder(String outOrderNo);

    /**
     * 申请退款
     */
    PayScoreResult refundServiceOrder(PayScoreRefundRequest request);

    /**
     * 查询退款状态
     */
    PayScoreResult queryRefund(String outOrderNo, String outRefundNo);

    /**
     * 解析支付分回调通知
     */
    PayScoreCallbackResult parseCallback(Map<String, Object> params);
}
