package api

import (
	"fmt"
	"gitea.party/public-messag-service/common/params"
	"gitea.party/public-messag-service/common/public"
	"gitea.party/public-messag-service/router/web"
	"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
	"github.com/gin-gonic/gin"
)

func EmailXSend(c *gin.Context) {
	result := web.NewResponse()
	defer web.SendResponse(c, result)()

	pm := params.EmailSend{}
	err := c.ShouldBindJSON(&pm)
	if err != nil {
		result.SetErrCode(public.RespCodeErrorParam).AddError(err)
		return
	}
	// 初始化客户端
	credentialsProvider := credentials.NewStaticAKCredentialsProvider(pm.AccessKeyId, pm.AccessKeySecret)
	client, err := sdk.NewClientWithOptions(
		"cn-hangzhou",       // 区域 ID,例如 cn-hangzhou
		sdk.NewConfig(),     // 请求配置
		credentialsProvider, //
	)
	if err != nil {
		panic(err)
	}

	// 创建请求
	request := requests.NewCommonRequest()
	request.Method = "POST"
	request.Scheme = "https"
	request.Domain = "dm.aliyuncs.com" // 邮件推送服务域名
	request.Version = "2015-11-23"     // API 版本
	request.ApiName = "SingleSendMail" // 接口名称

	// 设置请求参数
	request.QueryParams["RegionId"] = "cn-hangzhou"
	request.QueryParams["AccountName"] = "sender@your-domain.com"                   // 发件人地址(需验证)
	request.QueryParams["AddressType"] = "1"                                        // 0: 随机账号; 1: 发件人地址
	request.QueryParams["ReplyToAddress"] = "true"                                  // 是否允许回复
	request.QueryParams["ToAddress"] = "recipient@example.com"                      // 收件人地址
	request.QueryParams["Subject"] = "Test Email from Aliyun"                       // 邮件主题
	request.QueryParams["HtmlBody"] = "<h1>Hello</h1><p>This is a test email .</p>" // HTML 邮件正文
	// request.QueryParams["TextBody"] = "This is a test email." // 纯文本正文(可选,优先使用 HtmlBody)

	// 发送请求
	res, err := client.ProcessCommonRequest(request)
	if err != nil {
		panic(err)
	}

	// 输出响应
	//fmt.Println(res.GetHttpContentString())
	// 4. 处理响应
	if res.IsSuccess() {
		result.SetData(fmt.Sprintf("发送失败: %s", res.GetHttpContentString()))
		return
	} else {
		result.SetErrMsg(
			public.RespCodeErrorUnknown,
			fmt.Sprintf("发送失败: %s", res.GetHttpContentString())).AddError()
		return
	}
}