package com.czg.service.system.service.impl;

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.czg.exception.CzgException;
import com.czg.resp.CzgResult;
import com.czg.system.dto.SysParamsDTO;
import com.czg.system.service.SmsService;
import com.czg.system.service.SysParamsService;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;

/**
 * 验证码工具类
 *
 * @author Administrator
 */
@DubboService
@Slf4j
public class SmsServiceImpl implements SmsService {
    @Resource
    private SysParamsService sysParamsService;

    /**
     * 阿里云key
     */
//    @Value("${alipay.sms.key}")
    private String key;
    /**
     * 阿里云secret
     */
//    @Value("${alipay.sms.secret}")
    private String secret;
    /**
     * 短信模板id
     */
//    @Value("${alipay.sms.templateCode}")
    private String templateCode;

    @PostConstruct
    public void init() {
        CzgResult<SysParamsDTO> aliSmsKey = sysParamsService.getParamsByCode("ali_sms_key");
        CzgResult<SysParamsDTO> aliSmsSecret = sysParamsService.getParamsByCode("ali_sms_secret");
        CzgResult<SysParamsDTO> aliSmsTemplateCode = sysParamsService.getParamsByCode("ali_sms_template_code");
        key = aliSmsKey.getData().getParamValue();
        secret = aliSmsSecret.getData().getParamValue();
        templateCode = aliSmsTemplateCode.getData().getParamValue();
        log.info("短信工具类初始化完毕，key: {}, secret: {}, templateCode: {}", key, secret, templateCode);
    }

    public Client createClient() throws Exception {
        Config config = new Config();
        config.accessKeyId = key;
        config.accessKeySecret = secret;
        return new Client(config);
    }

    public void sendCode(String phone, String checkCode) {
        try {
            Client client = createClient();
            // 1.发送短信
            com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                    .setSignName("银收客")
                    .setTemplateCode(templateCode)
                    .setTemplateParam("{\"code\":" + "'" + checkCode + "'" + "}")
                    .setPhoneNumbers(phone);
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            log.info("短信发送请求参数: 手机号: {}, 短信模板: {}, 短信内容: {}", phone, templateCode, checkCode);
            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
            if (sendSmsResponse.getStatusCode() != 200) {
                throw new CzgException("短信发送失败");
            }
        }catch (Exception e) {
            log.info("发送短信失败", e);
        }
    }

    public static void main(String[] args) throws Exception {
        Config config = new Config();
        config.accessKeyId = "LTAI5tPdEfYSZcqHbjCrtPRD";
        config.accessKeySecret = "DZjyHBq3nTujF0NMLxnZgsecU8ZCvy";
        Client client = new Client(config);
        // 1.发送短信
        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                .setSignName("银收客")
                .setTemplateCode("SMS_244665149")
                .setTemplateParam("{\"code\":" + "'" + "23123" + "'" + "}")
                .setPhoneNumbers("19502966242");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
        System.out.println(sendSmsResponse);
    }
}
