package dingtalk

import (
	"fmt"
	"godocms/pkg/dingtalk/payload"
	"net/http"
	"net/url"
)

// 根据手机号查询用户
func (ding *DingTalk) GetUserIdByMobile(mobile string) (resp payload.MobileGetUserIdResp, err error) {
	return resp, ding.Request(http.MethodPost, GetUserIdByMobileKey, nil, payload.NewMobileGetUserIdReq(mobile), &resp)
}

// 获取jsapi_ticket => JSAPI(返回前端鉴权)
// JSAPI => auth_code(传递后端)
// auth_code + token => userid
// GetUserInfoByCode 通过免登码和access_token获取用户信息
func (ding *DingTalk) GetUserInfoByCode(code string) (resp payload.CodeGetUserInfo, err error) {
	return resp, ding.Request(http.MethodPost, GetUserInfoByCodeKey, nil,
		payload.NewCodeGetUserInfoReq(code), &resp)
}

// GetUserDetail 根据userid获取用户详情
func (ding *DingTalk) GetUserDetail(user *payload.UserDetailReq) (resp payload.UserDetailResp, err error) {
	return resp, ding.Request(http.MethodPost, GetUserDetailKey, nil, user, &resp)
}

// GetCurrentUserByAccessToken 通UserAccessToken获取当前授权人的信息
func (ding *DingTalk) GetCurrentUserByAccessToken(userAccessToken string) (rsp payload.ContactUser, err error) {
	query := url.Values{}
	query.Set("access_token", userAccessToken)
	return rsp, ding.Request(http.MethodGet, fmt.Sprintf(GetContactUser, "me"), query, nil, &rsp)
}

// GetContactUser 获取用户通讯录个人信息
// 调用本接口获取企业用户通讯录中的个人信息。
// @see https://open.dingtalk.com/document/orgapp/dingtalk-retrieve-user-information?spm=ding_open_doc.document.0.0.58b9492dZxH66f
func (ding *DingTalk) GetContactUser(unionId string) (rsp payload.ContactUser, err error) {
	return rsp, ding.Request(http.MethodGet, fmt.Sprintf(GetContactUser, unionId), nil, nil, &rsp)
}

// GetUserIdByUnionId 根据unionid获取用户userid
func (ding *DingTalk) GetUserIdByUnionId(res *payload.UnionIdGetUserIdReq) (req payload.UnionIdGetUserIdResponse, err error) {
	return req, ding.Request(http.MethodPost, GetUserIdByUnionIdKey, nil, res, &req)
}