package com.rf.psychological.utils;

import com.alibaba.fastjson.JSONObject;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONException;
import java.io.IOException;

/**
 * 腾讯云短信发送验证码工具类
 * @author QQ
 */
@Slf4j
public class SendMessageUtil {

    // 短信应用SDK AppID
    //int appid = 1400555402; // 1400开头

    // 短信应用SDK AppKey
    //String appkey = "197596018c4565ad023c2b145f4069a1";

    // 短信模板ID，需要在短信应用中申请
    //int templateId = 1064633; // NOTE: 这里的模板ID`7839`只是一个示例，真实的模板ID需要在短信控制台中申请

    // 签名
    //String smsSign = "北京决明科技"; // NOTE: 这里的签名"腾讯云"只是一个示例，真实的签名需要在短信控制台中申请，另外签名参数使用的是`签名内容`，而不是`签名ID`

    // 验证码
    String str = "000000";

    /**
     * 发送短信验证码
     * @param phoneNum 需要发送给哪个手机号码
     * @return 验证码，若为000000，则发送失败
     */
    public String sendMessage(String phoneNum) {
        try {
            // 随即6位数赋值验证码
            String strTemp = (int) ((Math.random() * 9 + 1) * 100000) + "";

            // 数组具体的元素个数和模板中变量个数必须一致
            // 比如你模板中需要填写验证码和有效时间，{1}，{2}
            // 那你这里的参数就应该填两个
            //String[] params = {strTemp , "5"};
            String[] params = {strTemp};
            SmsSingleSender ssender = new SmsSingleSender(Constant.appId, Constant.appKey);

            // 签名参数未提供或者为空时，会使用默认签名发送短信
            SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNum, Constant.templateId, params, Constant.smsSign, "", "");

            System.out.println("result = " + result);

            // 发送成功则给验证码赋值
            if (result.result == 0) {
                str = strTemp;
            }
        } catch (HTTPException e1) {
            // HTTP响应码错误
            e1.printStackTrace();
        } catch (JSONException e2) {
            // json解析错误
            e2.printStackTrace();
        } catch (IOException e3) {
            // 网络IO错误
            e3.printStackTrace();
        }
        return str;
    }

    /**
     * 测试计划短信提醒
     */
    public static void planMessage(JSONObject resultJson) {
        try {
            // 数组具体的元素个数和模板中变量个数必须一致
            // 比如你模板中需要填写验证码和有效时间，{1}，{2}
            // 那你这里的参数就应该填两个
            //String[] params = {strTemp , "5"};
            String[] params = {resultJson.getString("userName"),DateUtil.getDateStr(resultJson.getDate("beginTime"),DateUtil.DEFAULT_DATE),DateUtil.getDateStr(resultJson.getDate("endTime"),DateUtil.DEFAULT_DATE)};
            SmsSingleSender ssender = new SmsSingleSender(Constant.appId, Constant.appKey);

            // 签名参数未提供或者为空时，会使用默认签名发送短信
            SmsSingleSenderResult result = ssender.sendWithParam("86", resultJson.getString("phone"), 1401718, params, Constant.smsSign, "", "");
            JSONObject jsonObject = JSONObject.parseObject(result.toString());
            String errorMsg = jsonObject.getString("errmsg");
            if(errorMsg.equals("OK")){
                log.info(resultJson.getString("phone")+"发送完成");
            }else {
                log.info(Utils.unicodeDecode(errorMsg));
            }
            System.out.println(resultJson.getString("phone")+"-result = " + result);

        } catch (HTTPException e1) {
            // HTTP响应码错误
            e1.printStackTrace();
        } catch (JSONException e2) {
            // json解析错误
            e2.printStackTrace();
        } catch (IOException e3) {
            // 网络IO错误
            e3.printStackTrace();
        }
    }

    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("userName","111");
        jsonObject.put("phone","18612203962");
        jsonObject.put("beginTime","20202020");
        jsonObject.put("endTime","20202020");

        planMessage(jsonObject);
    }

}
