package com.inkasso.factoring.common.util.aliyunMail;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.Common;
import com.aliyun.teautil.models.RuntimeOptions;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * 阿里云邮箱服务
 *
 * @author liutao
 */
public class ShortMessageUtil {

    private static Logger log = LogManager.getLogger(ShortMessageConstant.class);

    /**
     * 使用AK&SK初始化账号Client
     *
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        Config config = new Config()
                // 必填，您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填，您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new Client(config);
    }

    /**
     * 短信发送
     *
     * @param phoneNumber   接收短信的电话号码
     * @param templateCode  短信模板code
     * @param templateParam 短信模板中填充参数的code值
     * @param signName      短信签名名称。您可以登录短信服务控制台，选择国内消息或国际/港澳台消息，在签名管理页面获取。
     * @throws Exception
     */
    public static void sendMessage(String phoneNumber, String templateCode, JSONObject templateParam, String signName) throws Exception {

        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致 AccessKey 泄露，并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用，仅供参考，建议使用更安全的 STS 方式，更多鉴权访问方式请参见：https://help.aliyun.com/document_detail/378657.html
        Client client = createClient(ShortMessageConstant.ALIBABA_CLOUD_ACCESS_KEY_ID, ShortMessageConstant.ALIBABA_CLOUD_ACCESS_KEY_SECRET);
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setSignName(signName)
                .setTemplateCode(templateCode)
                .setTemplateParam(templateParam.toJSONString())
                .setPhoneNumbers(phoneNumber);
        RuntimeOptions runtime = new RuntimeOptions();

        try {
            // 复制代码运行请自行打印 API 的返回值
            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
            System.out.println(JSON.toJSONString(sendSmsResponse));
        } catch (TeaException error) {
            // 如有需要，请打印 error
            String errorMsg = Common.assertAsString(error.message);
            log.error("阿里云短信错误：" + errorMsg);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 如有需要，请打印 error
            String errorMsg = Common.assertAsString(error.message);
            log.error("阿里云短信错误：" + errorMsg);
        }
    }

//    public static void main(String[] args) throws Exception {
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("name", "test");
//        jsonObject.put("documents", "documents");
//        sendMessage("18566271091", "SMS_463647827", jsonObject, "长安银科");
//    }
}
