package com.zanxiang.game.module.sdk.service;

import com.zanxiang.game.module.sdk.pojo.param.ProductPayParam;
import com.zanxiang.game.module.sdk.pojo.param.UserData;
import com.zanxiang.game.module.sdk.pojo.vo.PayParamVO;
import com.zanxiang.game.module.sdk.pojo.vo.SessionCheckVO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.Map;

/**
 * @author xufeng
 * @date 2022/6/8 15:31
 */
public interface IOrderPayService {

    /**
     * 得到支付参数
     *
     * @param code    代码
     * @param orderId 订单id
     * @param request 请求
     * @param openId  用户公众号唯一标识
     * @return {@link PayParamVO}
     */
    PayParamVO getPayParam(String code, String openId, String orderId, HttpServletRequest request);

    /**
     * 获取小游戏支付方式
     *
     * @param userData 用户数据
     * @return {@link Integer}
     */
    Long getAppletPayDevice(UserData userData);

    /**
     * 支付创建
     * 下单支付
     *
     * @param product  : 商品信息
     * @param userData : 用户信息
     * @return {@link Map}<{@link String}, {@link Object}>
     */
    Map<String, Object> payCreate(ProductPayParam product, UserData userData);

    /**
     * 支付异步回调
     *
     * @param request  : 请求参数
     * @param response : 接过
     * @param payType  : 支付类型
     * @return {@link String}
     * @throws IOException : 异常
     */
    String notify(HttpServletRequest request, HttpServletResponse response, Integer payType) throws IOException;

    /**
     * 订单支付结果查询
     *
     * @param orderId : 订单id
     * @return {@link Boolean}
     */
    Boolean payResult(String orderId);

    /**
     * 米大师session过期检测
     *
     * @param userData : 用户数据
     * @return : 返回检测结果
     */
    SessionCheckVO sessionCheck(UserData userData);
}
