package tool

import (
	"fmt"
	"gitee.ltd/lxh/xybot/base"
)

// CheckDatabaseOK
// @description: 检查数据库是否正常
// @receiver s
// @return running
// @return err
func (s service) CheckDatabaseOK() (running bool, err error) {
	var result CheckDatabaseOKResponse
	_, err = s.client.R().SetResult(&result).Get("/CheckDatabaseOK")
	running = result.Running
	return
}

// IsRunning
// @description: 是否在运行
// @receiver s
// @return flag
// @return err
func (s service) IsRunning() (flag bool, err error) {
	resp, err := s.client.R().Get("/IsRunning")
	if err != nil {
		return
	}
	flag = string(resp.Body()) == "OK"
	return
}

// CdnDownloadImg
// @description: 下载图片
// @receiver s
// @param aesKey
// @param cdnMidImgUrl
// @return dataBase64Str
// @return err
func (s service) CdnDownloadImg(aesKey, cdnMidImgUrl string) (dataBase64Str string, err error) {
	var result base.Response[string]
	_, err = s.client.R().
		SetResult(&result).
		SetBody(map[string]any{
			"Wxid":         s.wxId,
			"AesKey":       aesKey,
			"Cdnmidimgurl": cdnMidImgUrl,
		}).Post("/CdnDownloadImg")
	if err = result.CheckError(err); err != nil {
		return
	}
	dataBase64Str = result.Data
	return
}

// DownloadAttach
// @description: 下载附件
// @receiver s
// @param attachId
// @return dataBase64Str
// @return err
func (s service) DownloadAttach(attachId string) (dataBase64Str string, err error) {
	var result base.Response[DownloadAttachResponse]
	_, err = s.client.R().
		SetResult(&result).
		SetBody(map[string]any{
			"Wxid":     s.wxId,
			"AttachId": attachId,
		}).Post("/DownloadAttach")
	if err = result.CheckError(err); err != nil {
		return
	}
	dataBase64Str = result.Data.Data.Buffer
	return
}

// DownloadVideo
// @description: 下载视频
// @receiver s
// @param msgId
// @return dataBase64Str
// @return err
func (s service) DownloadVideo(msgId int) (dataBase64Str string, err error) {
	var result base.Response[DownloadAttachResponse]
	_, err = s.client.R().
		SetResult(&result).
		SetBody(map[string]any{
			"Wxid":  s.wxId,
			"MsgId": msgId,
		}).Post("/DownloadVideo")
	if err = result.CheckError(err); err != nil {
		return
	}
	dataBase64Str = result.Data.Data.Buffer
	return
}

// DownloadVoice
// @description: 下载语音
// @receiver s
// @param msgId
// @param voiceUrl
// @param length
// @return dataBase64Str
// @return err
func (s service) DownloadVoice(msgId int, voiceUrl string, length int) (dataBase64Str string, err error) {
	var result base.Response[DownloadAttachResponse]
	_, err = s.client.R().
		SetResult(&result).
		SetBody(map[string]any{
			"Wxid":     s.wxId,
			"MsgId":    msgId,
			"Voiceurl": voiceUrl,
			"Length":   length,
		}).Post("/DownloadVoice")
	if err = result.CheckError(err); err != nil {
		return
	}
	dataBase64Str = result.Data.Data.Buffer
	return
}

// SetProxy
// @description: 设置代理
// @receiver s
// @param param
// @return err
func (s service) SetProxy(param SetProxyRequest) (err error) {
	var result base.Response[base.EmptyResponse]
	_, err = s.client.R().
		SetResult(&result).
		SetBody(map[string]any{
			"Wxid": s.wxId,
			"Proxy": map[string]any{
				"ProxyIp":       fmt.Sprintf("%s:%d", param.Ip, param.Port),
				"ProxyUser":     param.Username,
				"ProxyPassword": param.Password,
			},
		}).
		Post("/SetProxy")
	if err = result.CheckError(err); err != nil {
		return
	}
	return
}

// SetStep
// @description: 设置运动步数
// @receiver s
// @param stepCount
// @return err
func (s service) SetStep(stepCount int) (err error) {
	var result base.Response[base.EmptyResponse]
	_, err = s.client.R().
		SetResult(&result).
		SetBody(map[string]any{
			"Wxid":      s.wxId,
			"StepCount": stepCount,
		}).Post("/SetStep")
	if err = result.CheckError(err); err != nil {
		return
	}
	return
}