package com.haha.service.payment;

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

/**
 * 支付业务门面服务
 * 上层代码统一通过此接口调用支付功能，无需关心具体支付渠道实现
 */
public interface PaymentService {
    
    /**
     * 创建支付
     * @param orderId 本地订单ID
     * @param channel 支付渠道
     * @param extra 扩展参数（如openId, buyerId等）
     * @return 支付结果（含前端调起支付所需参数）
     */
    PaymentResult createPayment(Long orderId, PaymentChannel channel, Map<String, String> extra);
    
    /**
     * 退款
     * @param orderId 本地订单ID
     * @param reason 退款原因
     * @return 退款结果
     */
    RefundResult refund(Long orderId, String reason);
    
    /**
     * 处理支付回调
     * @param channel 支付渠道
     * @param params 回调参数
     * @return 回调处理结果
     */
    PaymentCallbackResult handleCallback(PaymentChannel channel, Map<String, Object> params);
    
    /**
     * 查询支付状态
     * @param orderId 本地订单ID
     * @return 支付结果
     */
    PaymentResult queryPaymentStatus(Long orderId);
    
    /**
     * 获取当前可用的支付渠道列表
     */
    List<PaymentChannel> getAvailableChannels();
}
