package com.dcsoft.common.sms.service.impl;

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.dcsoft.common.core.utils.JsonUtils;
import com.dcsoft.common.core.utils.StringUtils;
import com.dcsoft.common.sms.config.properties.SmsProperties;
import com.dcsoft.common.sms.entity.SmsResult;
import com.dcsoft.common.sms.exception.SmsException;
import com.dcsoft.common.sms.service.SmsTemplate;
import lombok.SneakyThrows;

import java.util.Map;

/**
 * Aliyun 短信模板
 *
 * @author ai-cloud
 */
public class AliyunSmsTemplate implements SmsTemplate {

    private SmsProperties properties;

    private Client client;

    @SneakyThrows(Exception.class)
    public AliyunSmsTemplate(SmsProperties smsProperties) {
        this.properties = smsProperties;
        Config config = new Config()
                // 您的AccessKey ID
                .setAccessKeyId(smsProperties.getAccessKeyId())
                // 您的AccessKey Secret
                .setAccessKeySecret(smsProperties.getAccessKeySecret())
                // 访问的域名
                .setEndpoint(smsProperties.getEndpoint());
        this.client = new Client(config);
    }

    public SmsResult send(String phones, String templateId, Map<String, String> param) {
        if (StringUtils.isBlank(phones)) {
            throw new SmsException("手机号不能为空");
        }
        if (StringUtils.isBlank(templateId)) {
            throw new SmsException("模板ID不能为空");
        }
        SendSmsRequest req = new SendSmsRequest()
                .setPhoneNumbers(phones)
                .setSignName(properties.getSignName())
                .setTemplateCode(templateId)
                .setTemplateParam(JsonUtils.toJsonString(param));
        try {
            SendSmsResponse resp = client.sendSms(req);
            return SmsResult.builder()
                    .isSuccess("OK".equals(resp.getBody().getCode()))
                    .message(resp.getBody().getMessage())
                    .response(JsonUtils.toJsonString(resp))
                    .build();
        } catch (Exception e) {
            throw new SmsException(e.getMessage());
        }
    }

}
