package wxcomponent

import (
	"gitee.com/yansen_zh/wxcomponent/api/mp/webpage"
	"gitee.com/yansen_zh/wxcomponent/config"
)

// 代公众号服务
type MPService struct {
	appID string
}

// GetMpService 获取代公众号服务
func GetMpService(appID string) *MPService {
	return &MPService{appID: appID}
}

// JsapiTicket 代公众号使用js sdk
func (t *MPService) JsapiTicket(url string) (*webpage.JsapiSignature, error) {
	ticket, err := webpage.GetJSTicket(config.GetAuthorizer().GetAccessToken(t.appID))
	if err != nil {
		return nil, err
	}

	signature := webpage.GetJSAPISignature(ticket.Ticket, url)
	return signature, nil
}

// GetOpenID 网页授权 code 换取 OpenID
func (t *MPService) GetOpenID(code string) (string, error) {
	token, err := webpage.GetOAuthAccessToken(t.appID, code)
	if err != nil {
		return "", err
	}

	return token.OpenID, nil
}

// GetSnsUserInfo 网页授权, 获取用户信息
func (t *MPService) GetSnsUserInfo(code string) (*webpage.SnsApiUserInfo, error) {
	token, err := webpage.GetOAuthAccessToken(t.appID, code)
	if err != nil {
		return nil, err
	}

	return webpage.GetSnsApiUserInfo(token.AccessToken, token.OpenID, "")
}