package sdk

import (
	"encoding/json"
	"github.com/beego/beego/v2/adapter/httplib"
	"github.com/gin-gonic/gin"
	"net/http"
	"time"
)

const syDomain = "http://docater1.cn"

// SY 盛也sdk
type SY struct {
}

func NewSy() SY {
	return SY{}
}

// CheckOpenId 校验openid是否正确
// appsecret 是sy提供的密钥
func (s SY) CheckOpenId(openid, appsecret string) (bool, error) {
	req := httplib.Post(syDomain+"/index.php?g=Home&m=GameOauth&a=newCheckOpenId").
		SetTimeout(3*time.Second, 3*time.Second)
	req.Param("openId", openid)
	req.Param("channel", appsecret)
	retByte, err := req.Bytes()
	if err != nil {
		//网络请求失败
		return false, err
	}
	var ret SyOpenIdRes
	err = json.Unmarshal(retByte, &ret)
	if err != nil {
		//json解析失败
		return false, err
	}
	if ret.Status != 1001 {
		return false, nil
	}
	return true, nil
}

// sy请求获取openid的结果返回
type SyOpenIdRes struct {
	Status int    `json:"status"`
	Info   string `json:"info"`
	OpenId string `json:"openId"`
}

// SYRes SY接口返回数据
type SYRes struct {
	Status int    `json:"status"`
	Info   string `json:"info"`
}

// SYSuccess sy返回成功的json数据
func SYSuccess(c *gin.Context) {
	res := SYRes{
		Status: 1001,
		Info:   "success",
	}
	c.JSON(http.StatusOK, res)
	return
}

// SYFailed sy返回失败的json数据
func SYFailed(c *gin.Context, code int, msg string) {
	if code == 1001 {
		panic("SY状态码错误")
	}
	res := SYRes{
		Status: code,
		Info:   msg,
	}
	c.JSON(http.StatusOK, res)
	return
}
