/**
 * 核心服务接口sdk（golang版）
 *
 * @desc 啪啪运动 核心服务接口sdk
 * ---------------------------------------------------------------------
 * @author		unphp <unphp@qq.com>
 * @date		2018-12-18
 * @copyright	core-utils
 * ---------------------------------------------------------------------
 */

package cooper

import (
	"encoding/json"
	"errors"
	"net/url"
)

//SmsReturn 短信发送响应
type SmsReturn struct {
	RecordId  string `json:"record_id"`  //消息发送凭证
	SmsStatus string `json:"sms_status"` //消息状态
}

//SmsPush 消息发送接口
type SmsRequest struct {
	Client       *CoreClient
	TempId       int64  `json:"temp_id"`        //消息模板id
	SmsType      int64  `json:"sms_type"`       //消息发送方式：1短信，2后台站内消息，3微信推送
	SmsParams    string `json:"sms_params"`     //消息模板参数：多个参数值，用逗号连接
	SmsMobile    int64  `json:"sms_mobile"`     //发送者手机号
	SmsCallback  string `json:"sms_callback"`   //消息发送成功后，回调地址：带域名的完整地址
	SmsSendAsync int8   `json:"sms_send_async"` //消息发送模式：0同步（默认），1异步
}

//Params ...
func (that SmsRequest) Params() url.Values {
	var m = make(url.Values)
	m.Set("temp_id", ToString(that.TempId))
	m.Set("sms_type", ToString(that.SmsType))
	m.Set("sms_params", that.SmsParams)
	m.Set("sms_mobile", ToString(that.SmsMobile))
	m.Set("sms_callback", that.SmsCallback)
	m.Set("sms_send_async", ToString(that.SmsSendAsync))
	return m
}

//Post ...
func (that SmsRequest) Post(result interface{}) (int, error) {
	//
	_response, _err := that.Client.Post("/sms/push", that)
	if _err != nil {
		return 10001, _err
	}
	//
	var _data ResponseMap
	_data = make(map[string]interface{})
	if _err := _response.ToJSON(&_data); _err != nil {
		return 10002, _err
	}

	if !_data.Has("return_code") || !_data.Has("result_code") {
		return 10003, errors.New("aaaa")
	}
	_returnCode, _ := _data.String("return_code")
	_resultCode, _ := _data.String("result_code")
	//
	if _returnCode == "FAIL" {
		return 10004, errors.New("cccc")
	}
	//
	if _returnCode == "SUCCESS" || _resultCode == "SUCCESS" {
		_result, _err := json.Marshal(_data.Get("result"))
		if _err != nil {
			return 10005, errors.New("返回结果不符合格式")
		}
		//
		if _err := json.Unmarshal(_result, result); _err != nil {
			return 10006, errors.New("返回结果不符合格式")
		}
		return 0, nil
	}
	//
	return 10007, errors.New("未知错误")
}
