package com.sv.service.common;

import com.enums.SmsEnum;
import com.ydd.framework.core.common.sms.HandlerSmsResultResolver;
import com.ydd.framework.core.common.sms.enums.SmsStatusEnum;
import com.ydd.framework.core.common.sms.enums.SmsTypeEnum;
import com.ydd.framework.core.common.utils.HttpUtils;
import com.ydd.framework.core.exception.ServiceException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

/**
 * 发送短信
 */
@Component("juhe")
public class JuheSmsProvider {

    private Logger logger = LoggerFactory.getLogger(JuheSmsProvider.class);

    public static final  String smsUrl ="http://v.juhe.cn/sms/send";//请求接口地址
    //配置您申请的KEY
    public static final String APPKEY ="d75f1fe81871534bf7b9a3082e79c76a";
    @Resource
    private SmsService smsService;
    /**
     * 短信结果处理
     */
    protected HandlerSmsResultResolver handler;

    /**
     * 短信结果处理
     * mobile 手机号
     * tplId 短信模板ID
     * tplValue 变量名和变量值对，如：#code#=431515，整串值需要urlencode，比如正确结果为：%23code%23%3d431515。如果你的变量名或者变量值中带有#&=中的任意一个特殊符号，请先分别进行utf-8 urlencode编码后再传递
     * flg 1注册，2登录，3修改手机号
     */
    public boolean send(String mobile, Integer tplId,String tplValue,String  content) {
        Boolean result = Boolean.FALSE;
        Map params = new HashMap();//请求参数
        params.put("mobile",mobile);//接收短信的手机号码
        params.put("tpl_id","191498");//短信模板ID，请参考个人中心短信模板设置
        params.put("tpl_value",tplValue);//变量名和变量值对。如果你的变量名或者变量值中带有#&=中的任意一个特殊符号，请先分别进行urlencode编码后再传递，<a href="http://www.juhe.cn/news/index/id/50" target="_blank">详细说明></a>
        params.put("key",APPKEY);//应用APPKEY(应用详细页查询)
        params.put("dtype","json");//返回数据的格式,xml或json，默认json
        String resultContent = HttpUtils.post(smsUrl, params);
        JSONObject jsonObject = new JSONObject(resultContent);
        if(jsonObject.getInt("error_code")==0){
            result = true;
            //记录发送短信，数据库
            smsService.record(mobile, content, SmsTypeEnum.VERIFICATION,
                    Boolean.TRUE.equals(result) ? SmsStatusEnum.SUCCESS : SmsStatusEnum.FAILURE, SmsEnum.JUHE);
        }else{
            logger.warn("短信发送失败，短信发送结果：" + resultContent);
            throw new ServiceException("验证码发送失败，请重试");
        }
        return result;
    }

}
