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

import com.baomidou.mybatisplus.extension.service.IService;
import com.zanxiang.game.module.mybatis.entity.GameApplet;
import com.zanxiang.game.module.sdk.pojo.dto.GameAppletDTO;
import com.zanxiang.game.module.sdk.pojo.param.UserData;
import com.zanxiang.game.module.sdk.pojo.vo.GameInitVO;

import java.util.Map;

/**
 * @author : lingfeng
 * @time : 2022-07-08
 * @description : 微信小游戏(小程序)
 */
public interface IGameAppletService extends IService<GameApplet> {

    /**
     * 根据游戏外部唯一标志获取微信小游戏token
     *
     * @param gameAppId : CP游戏包唯一标识
     * @return : 微信小游戏 appId, token
     */
    Map<String, String> getAppletToken(String gameAppId);

    /**
     * applet味精检查
     *
     * @param appId     应用程序id
     * @param signature 签名
     * @param timestamp 时间戳
     * @param nonce     现时标志
     * @param echoStr   回声str
     * @return {@link String}
     * @throws Exception 异常
     */
    String appletMsgCheck(String appId, String signature, String timestamp, String nonce, String echoStr) throws Exception;

    /**
     * 小游戏消息推送
     *
     * @param appId     应用程序id
     * @param signature 签名
     * @param timestamp 时间戳
     * @param nonce     现时标志
     * @param postData  post数据
     * @return {@link String}
     * @throws Exception 异常
     */
    String appletMsg(String appId, String signature, String timestamp, String nonce, String postData) throws Exception;

    /**
     * 通过游戏id
     *
     * @param gameId 游戏id
     * @return {@link GameAppletDTO}
     */
    GameAppletDTO getByGameId(Long gameId);

    /**
     * 通过应用程序id
     *
     * @param appId 应用程序id
     * @return {@link GameAppletDTO}
     */
    GameAppletDTO getByAppId(String appId);

    /**
     * 微信小游戏初始化获取信息
     *
     * @param userData : 用户信息
     * @return {@link GameInitVO}
     */
    GameInitVO h5AndAppletInit(UserData userData);
}
