package sms

import (
	"crypto/md5"
	"encoding/hex"
	"errors"
	"fmt"
	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
	"time"
)

const (
	VERSION = "2024-05-30"
)

var HOST = requests.Host{
	Default: "sms.gaore.com",
}

type Client struct {
	sdk.Client
}

func NewClient() (client *Client, err error) {
	client = new(Client)
	err = client.Init()
	return
}

func (c *Client) SendEmail(req *SendEmailRequest) (resp *SendEmailResponse, err error) {
	if len(req.Addresses) == 0 {
		return nil, errors.New("addresses is empty")
	}
	if req.FromName == "" {
		return nil, errors.New("from is empty")
	}
	if req.Subject == "" {
		return nil, errors.New("subject is empty")
	}
	if req.Body == "" {
		return nil, errors.New("content is empty")
	}

	ts, token := getToken("04573fc4c8e01999a0909ab9c00bca5a")

	req.JsonParams["sign"] = token
	req.JsonParams["time"] = ts
	resp = CreateSendEmailResponse()
	err = c.DoAction(req, resp)
	return
}

func (c *Client) SendFeiShuWebHook(req *SendFeiShuWebHookRequest) (resp *SendFeiShuWebHookResponse, err error) {
	if req.Content == "" {
		err = errors.New("content is empty")
		return
	}

	if req.Do == "" {
		err = errors.New("webhook is empty")
		return
	}

	if req.Token == "" {
		err = errors.New("token is empty")
		return
	}

	resp = CreateSendFeiShuWebHookResponse()
	err = c.DoAction(req, resp)
	return
}

func (c *Client) SendSms(req *SendSmsRequest) (resp *SendSmsResponse, err error) {

	if req.Mobile == "" {
		err = errors.New("mobile is empty")
		return
	}

	if req.Type == "" {
		err = errors.New("type is empty")
		return
	}
	resp = CreateSendSmsResponse()
	err = c.DoAction(req, resp)
	return
}

func getToken(key string) (ts int64, token string) {
	ts = time.Now().Unix()
	hash := md5.New()
	hash.Write([]byte(fmt.Sprintf("%v%v", ts, key)))
	hashBytes := hash.Sum(nil)

	token = hex.EncodeToString(hashBytes)
	return
}