package shop.alien.store.strategy.merchantPayment;

import shop.alien.entity.result.R;

import java.util.Map;

/**
 * 商户支付策略接口（预订订单等，使用 StorePaymentConfig 按门店配置）
 * 与 strategy.payment 现有接口隔离，不影响原有 /payment 接口。
 *
 * @author system
 */
public interface MerchantPaymentStrategy {

    /**
     * 创建预支付（使用门店支付配置）
     *
     * @param storeId    门店ID
     * @param orderId    预订订单ID user_reservation_order.id
     * @param amountYuan 支付金额（元，字符串）
     * @param subject    订单描述
     * @param userId     用户ID
     * @return 含 orderStr、outTradeNo、orderSn、orderId 等
     */
    R<Map<String, Object>> createPrePay(Integer storeId, Integer orderId, String amountYuan, String subject, Integer userId, String smid);

    /**
     * 查询支付状态（根据商户订单号查第三方并更新订单与支付单）
     *
     * @param storeId    门店ID
     * @param outTradeNo 商户订单号
     * @return 支付成功返回 R.success，否则 R.fail
     */
    R<Object> queryPayStatus(Integer storeId, String outTradeNo);

    /**
     * 退款
     *
     * @param storeId      门店ID
     * @param outTradeNo   商户订单号
     * @param refundAmount 退款金额（元，字符串）
     * @param refundReason 退款原因
     * @return 成功 R.data("退款成功")，失败 R.fail
     */
    R<String> refund(Integer storeId, String outTradeNo, String refundAmount, String refundReason, Integer refundType);

    /**
     * 策略类型，如 alipay、wechatPay
     *
     * @return 支付类型
     */
    String getType();
}
