package ddsms

import (
	"encoding/json"
	"errors"
	"io/ioutil"
	"net/http"
	"net/url"
	"strings"
	//"fmt"
)

type dingdongyun struct {
	ApiKey string
	YzmUrl string
	TzUrl  string
}

var DDY = dingdongyun{}

func (that *dingdongyun) Init(apikey string) {
	that.ApiKey = apikey
	that.YzmUrl = "https://api.dingdongcloud.com/v2/sms/captcha/send.json"
	that.TzUrl = "https://api.dingdongcloud.com/v2/sms/notice/send.json"
}

// SendYZM 发送短信验证码 code验证码如：123456 返回true表示发送成功flase表示发送失败
func (that *dingdongyun) SendYZM(umoblie string, tpt string, data map[string]string) (bool, error) {
	for k, v := range data {
		tpt = strings.Replace(tpt, "{"+k+"}", v, -1)
	}

	return that.send(that.YzmUrl, umoblie, tpt)
}

// SendTz 发送通知
func (that *dingdongyun) SendTz(umoblie []string, tpt string, data map[string]string) (bool, error) {
	for k, v := range data {
		tpt = strings.Replace(tpt, "{"+k+"}", v, -1)
	}
	umobleStr := ""
	for i, v := range umoblie {
		if i == 0 {
			umobleStr = v
			continue
		}
		umobleStr += "," + v
	}
	return that.send(that.TzUrl, umobleStr, tpt)
}

//发送短信
func (that *dingdongyun) send(mUrl string, umoblie string, content string) (bool, error) {

	data_send_sms_yzm := url.Values{"apikey": {that.ApiKey}, "mobile": {umoblie}, "content": {content}}
	res, err := that.httpsPostForm(mUrl, data_send_sms_yzm)
	if err != nil && res == "" {
		return false, errors.New("连接错误")
	}

	var msg interface{}
	err1 := json.Unmarshal([]byte(res), &msg)
	if err1 != nil {
		return false, errors.New("json解析错误")
	}
	//fmt.Println(msg)
	resmsg := msg.(map[string]interface{})
	rcode := int(resmsg["code"].(float64))
	result := resmsg["msg"].(string)
	if rcode != 1 {
		return false, errors.New(result)
	}

	return true, nil
}

//调用url发送短信的连接
func (that *dingdongyun) httpsPostForm(url string, data url.Values) (string, error) {
	resp, err := http.PostForm(url, data)

	if err != nil {
		return "", err
	}

	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return "", err
	}

	return string(body), nil

}
