package wechat

import (
	"github.com/silenceper/wechat/v2"
	"github.com/silenceper/wechat/v2/cache"
	"github.com/silenceper/wechat/v2/officialaccount"
	h5config "github.com/silenceper/wechat/v2/officialaccount/config"
	"github.com/silenceper/wechat/v2/officialaccount/js"
	"github.com/silenceper/wechat/v2/officialaccount/oauth"
)

//基于此文档开发
//https://github.com/silenceper/wechat/blob/v2/doc/api/officialaccount.md
type h5Program struct {
	Memory *cache.Memory
	Config *h5config.Config
	*officialaccount.OfficialAccount
	weixin *wechat.Wechat //微信登录实例
}

var H5Program = h5Program{}

// Init 初始化
func (that *h5Program) Init(appid string, appsecret string) {
	that.weixin = wechat.NewWechat()
	that.Memory = cache.NewMemory()
	that.Config = &h5config.Config{
		AppID:     appid,
		AppSecret: appsecret,
		//Token:     "xxx",
		//EncodingAESKey: "xxxx",
		Cache: that.Memory,
	}
	that.OfficialAccount = that.weixin.GetOfficialAccount(that.Config)
}

// GetUserInfo 获取用户信息
func (that *h5Program) GetUserInfo(code string) (appid string, resToken oauth.ResAccessToken, userInfo oauth.UserInfo, err error) {
	auth := that.GetOauth()
	//weixin.GetOpenPlatform()
	resToken, err = auth.GetUserAccessToken(code)
	if err != nil {

		return auth.AppID, resToken, userInfo, err
	}

	//getUserInfo
	userInfo, err = auth.GetUserInfo(resToken.AccessToken, resToken.OpenID, "")
	if err != nil {
		return auth.AppID, resToken, userInfo, err
	}

	return auth.AppID, resToken, userInfo, err
}

// GetSignUrl js url签名
func (that *h5Program) GetSignUrl(signUrl string) (*js.Config, error) {

	js := that.OfficialAccount.GetJs()
	cfg1, e := js.GetConfig(signUrl)
	if e != nil {
		return nil, e
	}

	return cfg1, nil
}

// GetSignUrl js url签名
//func (that *h5Program) GetJsPay(signUrl string) (*js.Config, error) {
//	//
//	//js := that.OfficialAccount().GetJs()
//	//
//	//cfg1, e := js.GetConfig(signUrl)
//	//if e != nil {
//	//	return nil, e
//	//}
//
//	return cfg1, nil
//}
