package com.bohuikeji.frame.module.admin.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fcibook.quick.http.QuickHttp;
import org.apache.commons.lang.RandomStringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 网易云信分装000000
 */
public final class MsgCodeUtil {
    //发送验证码的请求路径URL
    private static final String CODE_URL="https://api.netease.im/sms/sendcode.action";
    //校验验证码的请求路径URL
    private static final String VERIFY_URL="https://api.netease.im/sms/verifycode.action";
    //发送通知类短信请求路径URL
    private static final String SERVER_URL="https://api.netease.im/sms/sendtemplate.action";
    //网易云信分配的账号，请替换你在管理后台应用下申请的Appkey
    private static final String APP_KEY="33b274b4b3a192eae4cd1f317f6bbfeb";
    //网易云信分配的密钥，请替换你在管理后台应用下申请的appSecret
    private static final String APP_SECRET="2145b2e323b3";
    //随机数
    private static final String NONCE="123456";
    //验证码模板ID
    public static final String TEMP_CODE="4062229";
    //通知类短息模板-业务通知模板
    public static final String TEMP_MSG="4062230";
    //通知类短息模板-违规警告
    public static final String TEMP_MSG2="4003346";
    //短信参数列表，用于依次填充模板，JSONArray格式，每个变量长度不能超过30字,对于不包含变量的模板，不填此参数表示模板即短信全文内容
    //private static final String PARAMS="['xxxx','xxxx']";

    //手机号
    //private static final String MOBILE="15771335697";
    //验证码长度，范围4～10，默认为4

    //手机号，接收者号码列表，JSONArray格式，限制接收者号码个数最多为100个
    //private static final String MOBILES="['13888888888','13666666666']";

    private static final String CODELEN="6";
    private static Logger log = LoggerFactory.getLogger(MsgCodeUtil.class);
    /**
     * 发送验证码
     * @param phone
     * @return
     */
        public static String sendCode(String phone) {
            if (phone.indexOf("D_")!=-1){
                return "000000";
            }
            String resultStr=getInit()
                    .url(CODE_URL).post()
                    .addParame("mobile",phone)
                    .addParame("codeLen",CODELEN)
                    .addParame("templateid","3883582").text();
            if (resultStr==null||resultStr.isEmpty()){
                log.error("验证码发送失败，请求接口失败！");
                return null;
            }
            JSONObject json=JSON.parseObject(resultStr);
            if (json==null){
                log.error("验证码发送失败，无法转换json："+resultStr);
                return null;
            }
            if (json.getIntValue("code")!=200){
                log.error("验证码发送失败！错误码："+json.getIntValue("code"));
                return null;
            }
        return json.getString("obj");
    }
    /**
     * 校验验证码
     * @param phone
     * @return
     */
    public static boolean verifyCode(String phone,String code) {
        if ("000000".equals(code)){
            return true;
        }
        String resultStr=getInit()
                .url(VERIFY_URL).post()
                .addParame("mobile",phone)
                .addParame("code",code).text();
        JSONObject json=JSON.parseObject(resultStr);
        if (json.getIntValue("code")!=200){
            log.error("校验失败失败！错误码："+json.getIntValue("code"));
            return false;
        }
        return true;
    }


    /**
     * 初始化请求头
     * @return
     */
    private static QuickHttp getInit(){
        String nonce=getNonce(8);
        String curTime=System.currentTimeMillis()+"";
        return IpUtil.getQt()
                .addHeader("Content-Type","application/x-www-form-urlencoded")
                .addHeader("charset","utf-8")
                .addHeader("AppKey",APP_KEY)
                .addHeader("Nonce",nonce)
                .addHeader("CurTime",curTime)
                .addHeader("CheckSum",getCheckSum(nonce,curTime));
    }

    /**
     * 获取CheckSum
     * @param nonce
     * @param curTime
     * @return
     */
    private  static String getCheckSum(String nonce, String curTime){
        return CheckSumBuilder.getCheckSum(APP_SECRET,nonce,curTime);
    }

    /**
     * 获取随机字符串
     * @param length
     * @return
     */
    private static String getNonce(int length){
        return RandomStringUtils.randomAlphanumeric(length);
    }

}
