package urllink

import (
	"fmt"

	"github.com/silenceper/wechat/v2/util"
)

const queryURL = "https://api.weixin.qq.com/wxa/query_urllink"

// ULQueryResult 返回的结果
// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.query.html 返回值
type ULQueryResult struct {
	util.CommonError

	URLLinkInfo struct {
		Appid      string `json:"appid"`
		Path       string `json:"path"`
		Query      string `json:"query"`
		CreateTime int64  `json:"create_time"`
		ExpireTime int64  `json:"expire_time"`
		EnvVersion string `json:"env_version"`
		CloudBase  struct {
			Env           string `json:"env"`
			Domain        string `json:"domain"`
			Path          string `json:"path"`
			Query         string `json:"query"`
			ResourceAppid string `json:"resource_appid"`
		} `json:"cloud_base"`
	} `json:"url_link_info"`
	VisitOpenid string `json:"visit_openid"`
}

// Query 查询小程序 url_link 配置。
func (u *URLLink) Query(urlLink string) (*ULQueryResult, error) {
	accessToken, err := u.GetAccessToken()
	if err != nil {
		return nil, err
	}

	uri := fmt.Sprintf("%s?access_token=%s", queryURL, accessToken)
	response, err := util.PostJSON(uri, map[string]string{"url_link": urlLink})
	if err != nil {
		return nil, err
	}
	var resp ULQueryResult
	err = util.DecodeWithError(response, &resp, "URLLink.Query")
	if err != nil {
		return nil, err
	}
	return &resp, nil
}
