package enterprise_wechat

import (
	"errors"
	"git.rosy.net.cn/baseapi/utils"
	"net/http"
)

// 创建成员,将门店老板创建为京西员工
func (a *API) CreateBoss2JxStaff(param *CreateBoos2JXStaffReq) error {
	a.CheckAccessTokenExpiresIn()
	result, err := a.AccessAPI(WeChatBaseApi, CreateBoosToJxStaff, http.MethodPost, utils.Struct2FlatMap(param))
	if err != nil {
		return err
	}

	errResult := &Err{}
	if err := utils.Map2StructByJson(result, errResult, false); err != nil {
		return err
	}
	if errResult.ErrCode != 0 {
		return errors.New(errResult.ErrMsg)
	}
	return nil
}

// 创建会话群聊
// 只允许企业自建应用调用，且应用的可见范围必须是根部门；
// 群成员人数不可超过管理端配置的“群成员人数上限”，且最大不可超过2000人；
// 每企业创建群数不可超过1000/天；
func (a *API) CreateAppChat(param *CreateAppChatParamReq) error {
	a.CheckAccessTokenExpiresIn()
	data, err := a.AccessAPI(WeChatBaseApi, CreateAppChat, http.MethodPost, utils.Struct2FlatMap(param))
	if err != nil {
		return err
	}
	errResult := &Err{}
	if err := utils.Map2StructByJson(data, errResult, false); err != nil {
		return err
	}
	if errResult.ErrCode != 0 {
		return errors.New(errResult.ErrMsg)
	}
	return nil
}

// 获取所有的部门列表
func (a *API) GetAllDepartmentList() ([]*Department, error) {
	a.CheckAccessTokenExpiresIn()
	param := map[string]interface{}{"access_token": a.accessToken}
	data, err := a.AccessAPI(WeChatBaseApi, GetAllDepartmentListById, http.MethodGet, param)
	if err != nil {
		return nil, err
	}
	result := &GetAllDepartmentListRes{}
	if err := utils.Map2StructByJson(data, result, false); err != nil {
		return nil, err
	}
	if result.ErrCode != 0 {
		return nil, errors.New(result.ErrMsg)
	}

	return result.Department, nil
}

// 通过手机号获取用户消息
func (a *API) GetUserIdByMobile(mobile string) (string, error) {
	a.CheckAccessTokenExpiresIn()
	data, err := a.AccessAPI(WeChatBaseApi, GetUserByMobileUrl, http.MethodPost, map[string]interface{}{"mobile": mobile})
	if err != nil {
		return "", err
	}

	result := &GetUserByMobileRes{}
	if err := utils.Map2StructByJson(data, result, false); err != nil {
		return "", err
	}
	if result.ErrCode != 0 {
		return "", errors.New(result.ErrMsg)
	}

	return result.UserId, nil
}
