package core

import (
	"github.com/goWxHook/goWxHook/utils/json"
)

type CDNInitialResponse struct {
	Data CDNInitialResponseData `json:"data"`
	Type int                    `json:"type"`
}

type CDNInitialResponseData struct {
	Status int `json:"status"`
}

// InitialCDN CDN初始化
func (w *WxApi) InitialCDN() (*CDNInitialResponseData, error) {
	resp, err := w.internalCall(MtCdnInitialMsg, 30, MtCdnInitialMsg, map[string]interface{}{}, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNInitialResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNUploadRequest struct {
	FileType int    `json:"file_type"`
	FilePath string `json:"file_path"`
}

type CDNUploadResponseData struct {
	AesKey        string `json:"aes_key"`
	Crc32         int64  `json:"crc32"`
	ErrorCode     int    `json:"error_code"`
	FileId        string `json:"file_id"`
	FileKey       string `json:"file_key"`
	FileMd5       string `json:"file_md5"`
	FilePath      string `json:"file_path"`
	FileSize      int    `json:"file_size"`
	ThumbFileMd5  string `json:"thumb_file_md5"`
	ThumbFileSize int    `json:"thumb_file_size"`
}

type CDNUploadResponse struct {
	Data CDNUploadResponseData `json:"data"`
	Type int                   `json:"type"`
}

// CDNUpload CDN上传
func (w *WxApi) CDNUpload(request CDNUploadRequest) (*CDNUploadResponseData, error) {
	resp, err := w.internalCall(MtCdnUploadFileMsg, 600, MtCdnUploadFileMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNUploadResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNDownloadRequest struct {
	FileId   string `json:"file_id"`
	FileType int    `json:"file_type"`
	AesKey   string `json:"aes_key"`
	SavePath string `json:"save_path"`
}

type CDNDownloadResponseData struct {
	ErrorCode int    `json:"error_code"`
	FileId    string `json:"file_id"`
	FileSize  int    `json:"file_size"`
	SavePath  string `json:"save_path"`
}

type CDNDownloadResponse struct {
	Data CDNDownloadResponseData `json:"data"`
	Type int                     `json:"type"`
}

// CDNDownload CDN下载
func (w *WxApi) CDNDownload(request CDNDownloadRequest) (*CDNDownloadResponseData, error) {
	resp, err := w.internalCall(MtCdnDownloadFileMsg, 600, MtCdnDownloadFileMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNDownloadResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type WorkWxCdnDownloadRequest struct {
	Url      string `json:"url"`
	AuthKey  string `json:"auth_key"`
	AesKey   string `json:"aes_key"`
	SavePath string `json:"save_path"`
}

type WorkWxCdnDownloadResponseData struct {
	ErrorCode int    `json:"error_code"`
	SavePath  string `json:"save_path"`
}

type WorkWxCdnDownloadResponse struct {
	Data WorkWxCdnDownloadResponseData `json:"data"`
	Type int                           `json:"type"`
}

// WorkWxCdnDownload 企业微信CDN
func (w *WxApi) WorkWxCdnDownload(request WorkWxCdnDownloadRequest) (*WorkWxCdnDownloadResponseData, error) {
	resp, err := w.internalCall(MtWorkWxCdnDownloadMsg, 600, MtWorkWxCdnDownloadMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata WorkWxCdnDownloadResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendTextMsgRequest struct {
	ToWxid  string   `json:"to_wxid"`
	Content string   `json:"content"`
	AtList  []string `json:"at_list"` // 群消息时候使用
	AtAll   int      `json:"at_all"`  // 群消息时候，1是at所有人
}

type CDNSendTextMsgResponseData struct {
	BaseResponse struct {
		Ret int `json:"ret"`
	} `json:"baseResponse"`
	Count           int `json:"count"`
	MsgResponseList []struct {
		ClientMsgId int    `json:"clientMsgId"`
		CreateTime  int    `json:"createTime"`
		MsgId       int    `json:"msgId"`
		NewMsgId    string `json:"newMsgId"`
		Ret         int    `json:"ret"`
		ServerTime  int    `json:"serverTime"`
		ToUserName  struct {
			String string `json:"string"`
		} `json:"toUserName"`
		Type int `json:"type"`
	} `json:"msgResponseList"`
}
type CDNSendTextMsgResponse struct {
	Data CDNSendTextMsgResponseData `json:"data"`
	Type int                        `json:"type"`
}

// CDNSendTextMsg 发送文本消息
func (w *WxApi) CDNSendTextMsg(request CDNSendTextMsgRequest) (*CDNSendTextMsgResponseData, error) {
	var (
		resp string
		err  error
	)
	if len(request.AtList) > 0 || request.AtAll == 1 {
		resp, err = w.internalCall(MtCdnSendAtTextMsg, 30, MtCdnSendAtTextMsg, request, nil)
		if err != nil {
			return nil, err
		}
	} else {
		resp, err = w.internalCall(MtCdnSendTextMsg, 30, MtCdnSendTextMsg, request, nil)
		if err != nil {
			return nil, err
		}
	}
	var rdata CDNSendTextMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendImageMsgRequest struct {
	AesKey        string `json:"aes_key"`
	FileId        string `json:"file_id"`
	FileMd5       string `json:"file_md5"`
	FileSize      int    `json:"file_size"`
	ThumbFileSize int    `json:"thumb_file_size"`
	Crc32         int    `json:"crc32"`
	ToWxid        string `json:"to_wxid"`
}

type CDNSendImageMsgResponseData struct {
	AesKey        string `json:"aes_key"`
	FileId        string `json:"file_id"`
	FileMd5       string `json:"file_md5"`
	FileSize      int    `json:"file_size"`
	ThumbFileSize int    `json:"thumb_file_size"`
	Crc32         int    `json:"crc32"`
	ToWxid        string `json:"to_wxid"`
}

type CDNSendImageMsgResponse struct {
	Data CDNSendImageMsgResponseData `json:"data"`
	Type int                         `json:"type"`
}

// CDNSendImageMsg 发送图片
func (w *WxApi) CDNSendImageMsg(request CDNSendImageMsgRequest) (*CDNSendImageMsgResponseData, error) {
	resp, err := w.internalCall(MtCdnSendImageMsg, 120, MtCdnSendImageMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendImageMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendVideoMsgRequest struct {
	AesKey        string `json:"aes_key"`
	FileId        string `json:"file_id"`
	FileMd5       string `json:"file_md5"`
	FileSize      int    `json:"file_size"`
	ThumbFileSize int    `json:"thumb_file_size"`
	ToWxid        string `json:"to_wxid"`
}

type CDNSendVideoMsgResponseData struct {
	ActionFlag   int    `json:"actionFlag"`
	Aeskey       string `json:"aeskey"`
	BaseResponse struct {
		Ret int `json:"ret"`
	} `json:"baseResponse"`
	ClientMsgId          string `json:"clientMsgId"`
	MsgId                int    `json:"msgId"`
	MsgSource            string `json:"msgSource"`
	NewMsgId             string `json:"newMsgId"`
	RawAeskey            string `json:"rawAeskey"`
	RawVideoNeedReupload bool   `json:"rawVideoNeedReupload"`
	ThumbStartPos        int    `json:"thumbStartPos"`
	VideoNeedReupload    bool   `json:"videoNeedReupload"`
	VideoStartPos        int    `json:"videoStartPos"`
}

type CDNSendVideoMsgResponse struct {
	Data CDNSendVideoMsgResponseData `json:"data"`
	Type int                         `json:"type"`
}

func (w *WxApi) CDNSendVideoMsg(request CDNSendVideoMsgRequest) (*CDNSendVideoMsgResponseData, error) {
	resp, err := w.internalCall(MtCdnSendVideoMsg, 120, MtCdnSendVideoMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendVideoMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendFileMsgRequest struct {
	AesKey   string `json:"aes_key"`
	FileId   string `json:"file_id"`
	FileMd5  string `json:"file_md5"`
	FileName string `json:"file_name"`
	FileSize int    `json:"file_size"`
	ToWxid   string `json:"to_wxid"`
}

type CDNSendFileMsgResponseData struct {
	ActionFlag   int    `json:"actionFlag"`
	Aeskey       string `json:"aeskey"`
	AppId        string `json:"appId"`
	BaseResponse struct {
		Ret int `json:"ret"`
	} `json:"baseResponse"`
	ClientMsgId  string `json:"clientMsgId"`
	CreateTime   int    `json:"createTime"`
	FromUserName string `json:"fromUserName"`
	MsgId        int    `json:"msgId"`
	MsgSource    string `json:"msgSource"`
	NewMsgId     string `json:"newMsgId"`
	ToUserName   string `json:"toUserName"`
	Type         int    `json:"type"`
}

type CDNSendFileMsgResponse struct {
	Data CDNSendFileMsgResponseData `json:"data"`
	Type int                        `json:"type"`
}

// CDNSendFileMsg 发送文件
func (w *WxApi) CDNSendFileMsg(request CDNSendFileMsgRequest) (*CDNSendFileMsgResponseData, error) {
	resp, err := w.internalCall(MtCdnSendFileMsg, 120, MtCdnSendFileMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendFileMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendCardLinkMsgRequest struct {
	ToWxid   string `json:"to_wxid"`
	Title    string `json:"title"`
	Desc     string `json:"desc"`
	Url      string `json:"url"`
	ImageUrl string `json:"image_url"`
}

type CDNSendCardLinkMsgResponseData struct {
	ActionFlag   int    `json:"actionFlag"`
	Aeskey       string `json:"aeskey"`
	AppId        string `json:"appId"`
	BaseResponse struct {
		ErrMsg struct {
		} `json:"errMsg"`
		Ret int `json:"ret"`
	} `json:"baseResponse"`
	ClientMsgId  string `json:"clientMsgId"`
	CreateTime   int    `json:"createTime"`
	FromUserName string `json:"fromUserName"`
	MsgId        int    `json:"msgId"`
	MsgSource    string `json:"msgSource"`
	NewMsgId     string `json:"newMsgId"`
	ToUserName   string `json:"toUserName"`
	Type         int    `json:"type"`
}

type CDNSendCardLinkMsgResponse struct {
	Data CDNSendCardLinkMsgResponseData `json:"data"`
	Type int                            `json:"type"`
}

// CDNSendCardLinkMsg 发送链接卡片
func (w *WxApi) CDNSendCardLinkMsg(request CDNSendCardLinkMsgRequest) (*CDNSendCardLinkMsgResponseData, error) {
	resp, err := w.internalCall(MtCdnSendCardLinkMsg, 120, MtCdnSendCardLinkMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendCardLinkMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendGifMsgRequest struct {
	AesKey   string `json:"aes_key"`
	FileId   string `json:"file_id"`
	FileMd5  string `json:"file_md5"`
	FileSize int    `json:"file_size"`
	ToWxid   string `json:"to_wxid"`
}

type CDNSendGifMsgResponseData struct {
	ActionFlag   int    `json:"actionFlag"`
	Aeskey       string `json:"aeskey"`
	AppId        string `json:"appId"`
	BaseResponse struct {
		Ret int `json:"ret"`
	} `json:"baseResponse"`
	ClientMsgId  string `json:"clientMsgId"`
	CreateTime   int    `json:"createTime"`
	FromUserName string `json:"fromUserName"`
	MsgId        int    `json:"msgId"`
	MsgSource    string `json:"msgSource"`
	NewMsgId     string `json:"newMsgId"`
	ToUserName   string `json:"toUserName"`
	Type         int    `json:"type"`
}

type CDNSendGifMsgResponse struct {
	Data CDNSendGifMsgResponseData `json:"data"`
	Type int                       `json:"type"`
}

// CDNSendGifMsg 发送动图
func (w *WxApi) CDNSendGifMsg(request CDNSendGifMsgRequest) (*CDNSendGifMsgResponseData, error) {
	resp, err := w.internalCall(MtCdnSendGifMsg, 120, MtCdnSendGifMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendGifMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendMiniProgramMsgRequest struct {
	ToWxid   string `json:"to_wxid"`
	Username string `json:"username"`
	Appid    string `json:"appid"`
	Appname  string `json:"appname"`
	Appicon  string `json:"appicon"`
	Title    string `json:"title"`
	PagePath string `json:"page_path"`
	FileId   string `json:"file_id"`
	AesKey   string `json:"aes_key"`
	FileMd5  string `json:"file_md5"`
	FileSize int    `json:"file_size"`
}
type CDNSendMiniProgramMsgResponseData struct {
	ActionFlag   int    `json:"actionFlag"`
	Aeskey       string `json:"aeskey"`
	AppId        string `json:"appId"`
	BaseResponse struct {
		Ret int `json:"ret"`
	} `json:"baseResponse"`
	ClientMsgId  string `json:"clientMsgId"`
	CreateTime   int    `json:"createTime"`
	FromUserName string `json:"fromUserName"`
	MsgId        int    `json:"msgId"`
	MsgSource    string `json:"msgSource"`
	NewMsgId     string `json:"newMsgId"`
	ToUserName   string `json:"toUserName"`
	Type         int    `json:"type"`
}

type CDNSendMiniProgramMsgResponse struct {
	Data CDNSendMiniProgramMsgResponseData `json:"data"`
	Type int                               `json:"type"`
}

// CDNSendMiniProgramMsg 发送小程序
func (w *WxApi) CDNSendMiniProgramMsg(request CDNSendMiniProgramMsgRequest) (*CDNSendMiniProgramMsgResponseData, error) {
	resp, err := w.internalCall(MtCdnSendMiniProgramMsg, 120, MtCdnSendMiniProgramMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendMiniProgramMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendVideoMomentMsgRequest struct {
	ToWxid        string `json:"to_wxid"`
	ObjectId      string `json:"object_id"`
	ObjectNonceId string `json:"object_nonce_id"`
	Nickname      string `json:"nickname"`
	Username      string `json:"username"`
	Avatar        string `json:"avatar"`
	Desc          string `json:"desc"`
	ThumbUrl      string `json:"thumb_url"`
	Url           string `json:"url"`
}

type CDNSendVideoMomentMsgResponseData struct {
	ActionFlag   int    `json:"actionFlag"`
	Aeskey       string `json:"aeskey"`
	AppId        string `json:"appId"`
	BaseResponse struct {
		Ret int `json:"ret"`
	} `json:"baseResponse"`
	ClientMsgId  string `json:"clientMsgId"`
	CreateTime   int    `json:"createTime"`
	FromUserName string `json:"fromUserName"`
	MsgId        int    `json:"msgId"`
	MsgSource    string `json:"msgSource"`
	NewMsgId     string `json:"newMsgId"`
	ToUserName   string `json:"toUserName"`
	Type         int    `json:"type"`
}

type CDNSendVideoMomentMsgResponse struct {
	Data CDNSendVideoMomentMsgResponseData `json:"data"`
	Type int                               `json:"type"`
}

// CDNSendVideoMomentMsg 发送视频号
func (w *WxApi) CDNSendVideoMomentMsg(request CDNSendVideoMomentMsgRequest) (*CDNSendVideoMomentMsgResponseData, error) {
	resp, err := w.internalCall(MtCdnSendVideoMomentMsg, 120, MtCdnSendVideoMomentMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendVideoMomentMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendCardMsgRequest struct {
	ToWxid   string `json:"to_wxid"`
	Username string `json:"username"`
	Nickname string `json:"nickname"`
	Avatar   string `json:"avatar"`
}

type CDNSendCardMsgResponseData struct {
	BaseResponse struct {
		Ret int `json:"ret"`
	} `json:"baseResponse"`
	Count           int `json:"count"`
	MsgResponseList []struct {
		ClientMsgId int    `json:"clientMsgId"`
		CreateTime  int    `json:"createTime"`
		MsgId       int    `json:"msgId"`
		NewMsgId    string `json:"newMsgId"`
		Ret         int    `json:"ret"`
		ServerTime  int    `json:"serverTime"`
		ToUserName  struct {
			String string `json:"string"`
		} `json:"toUserName"`
		Type int `json:"type"`
	} `json:"msgResponseList"`
}

type CDNSendCardMsgResponse struct {
	Data CDNSendCardMsgResponseData `json:"data"`
	Type int                        `json:"type"`
}

// CDNSendCardMsg 发送名片
func (w *WxApi) CDNSendCardMsg(request CDNSendCardMsgRequest) (*CDNSendCardMsgResponseData, error) {
	resp, err := w.internalCall(MtCdnSendCardMsg, 120, MtCdnSendCardMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendCardMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendLocationMsgRequest struct {
	ToWxid    string  `json:"to_wxid"`
	Address   string  `json:"address"`
	Latitude  float64 `json:"latitude"`
	Longitude float64 `json:"longitude"`
	Title     string  `json:"title"`
}

type CDNSendLocationMsgResponseData struct {
	BaseResponse struct {
		Ret int `json:"ret"`
	} `json:"baseResponse"`
	Count           int `json:"count"`
	MsgResponseList []struct {
		ClientMsgId int    `json:"clientMsgId"`
		CreateTime  int    `json:"createTime"`
		MsgId       int    `json:"msgId"`
		NewMsgId    string `json:"newMsgId"`
		Ret         int    `json:"ret"`
		ServerTime  int    `json:"serverTime"`
		ToUserName  struct {
			String string `json:"string"`
		} `json:"toUserName"`
		Type int `json:"type"`
	} `json:"msgResponseList"`
}

type CDNSendLocationMsgResponse struct {
	Data CDNSendLocationMsgResponseData `json:"data"`
	Type int                            `json:"type"`
}

// CDNSendLocationMsg 发送位置
func (w *WxApi) CDNSendLocationMsg(request CDNSendLocationMsgRequest) (*CDNSendLocationMsgResponseData, error) {
	resp, err := w.internalCall(MtCdnSendLocationMsg, 120, MtCdnSendLocationMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendLocationMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendRevokeMsgRequest struct {
	ClientMsgid interface{} `json:"client_msgid"`
	CreateTime  int         `json:"create_time"`
	ToWxid      string      `json:"to_wxid"`
	NewMsgid    string      `json:"new_msgid"`
}

type CDNSendRevokeMsgResponseData struct {
	BaseResponse struct {
		Ret int `json:"ret"`
	} `json:"baseResponse"`
	Introduction string `json:"introduction"`
	SysWording   string `json:"sysWording"`
}

type CDNSendRevokeMsgResponse struct {
	Data CDNSendRevokeMsgResponseData `json:"data"`
	Type int                          `json:"type"`
}

// CDNSendRevokeMsg 撤回消息
func (w *WxApi) CDNSendRevokeMsg(request CDNSendRevokeMsgRequest) (*CDNSendRevokeMsgResponseData, error) {
	resp, err := w.internalCall(MtCdnSendRevokeMsg, 120, MtCdnSendRevokeMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendRevokeMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendXmlMsgRequest struct {
	// "<appmsg appid=\"wx6618f1cfc6c132f8\" sdkver=\"0\"><title>1658934822522.gif<... ...</weappinfo><websearch /></appmsg>",
	Content string `json:"content"`
	ToWxid  string `json:"to_wxid"`
}

type CDNSendXmlMsgResponseData struct {
	ActionFlag   int    `json:"actionFlag"`
	Aeskey       string `json:"aeskey"`
	AppId        string `json:"appId"`
	BaseResponse struct {
		Ret int `json:"ret"`
	} `json:"baseResponse"`
	ClientMsgId  string `json:"clientMsgId"`
	CreateTime   int    `json:"createTime"`
	FromUserName string `json:"fromUserName"`
	MsgId        int    `json:"msgId"`
	MsgSource    string `json:"msgSource"`
	NewMsgId     string `json:"newMsgId"`
	ToUserName   string `json:"toUserName"`
	Type         int    `json:"type"`
}

type CDNSendXmlMsgResponse struct {
	Data CDNSendXmlMsgResponseData `json:"data"`
	Type int                       `json:"type"`
}

// CDNSendXmlMsg 发送xml消息
func (w *WxApi) CDNSendXmlMsg(request CDNSendXmlMsgRequest) (*CDNSendXmlMsgResponseData, error) {
	resp, err := w.internalCall(MtCdnSendXmlMsg, 120, MtCdnSendXmlMsg, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendXmlMsgResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}

type CDNSendGifMsgNewRequest struct {
	Path   string `json:"path"`
	ToWxid string `json:"to_wxid"`
}

type CDNSendGifMsgNewResponseData struct {
	Md5    string `json:"md5"`
	Size   int    `json:"size"`
	ToWxid string `json:"to_wxid"`
}

type CDNSendGifMsgNewResponse struct {
	Data CDNSendGifMsgNewResponseData `json:"data"`
	Type int                          `json:"type"`
}

// CDNSendGifMsgNew 发送动图
func (w *WxApi) CDNSendGifMsgNew(request CDNSendGifMsgNewRequest) (*CDNSendGifMsgNewResponseData, error) {
	resp, err := w.internalCall(MtCdnSendGifMsgNew, 120, MtCdnSendGifMsgNew, request, nil)
	if err != nil {
		return nil, err
	}
	var rdata CDNSendGifMsgNewResponse
	err = json.Unmarshal([]byte(resp), &rdata)
	if err != nil {
		return nil, WxError{-1, err.Error()}
	}
	return &rdata.Data, nil
}
