/**
 * 请勿将俱乐部专享资源复制给其他人，保护知识产权即是保护我们所在的行业，进而保护我们自己的利益
 * 即便是公司的同事，也请尊重 JFinal 作者的努力与付出，不要复制给同事
 * <p>
 * 如果你尚未加入俱乐部，请立即删除该项目，或者现在加入俱乐部：http://jfinal.com/club
 * <p>
 * 俱乐部将提供 jfinal-club 项目文档与设计资源、专用 QQ 群，以及作者在俱乐部定期的分享与答疑，
 * 价值远比仅仅拥有 jfinal club 项目源代码要大得多
 * <p>
 * JFinal 俱乐部是五年以来首次寻求外部资源的尝试，以便于有资源创建更加
 * 高品质的产品与服务，为大家带来更大的价值，所以请大家多多支持，不要将
 * 首次的尝试扼杀在了摇篮之中
 */

package com.jfinal.club.reg;

import com.alibaba.fastjson.JSONObject;
import com.jfinal.aop.Before;
import com.jfinal.aop.Clear;
import com.jfinal.aop.Inject;
import com.jfinal.club.common.kit.IpKit;
import com.jfinal.club.util.HttpSender;
import com.jfinal.core.Controller;
import com.jfinal.kit.Ret;
import com.jfinal.kit.StrKit;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.regex.Pattern;

/**
 * 注册控制器
 */
public class RegController extends Controller {

    @Inject
    RegService srv;

    public void index() {
        render("register.html");
    }


    /**
     * 注册操作
     */
    @Before(RegValidator.class)
    public void save() {
        String ip = IpKit.getRealIp(getRequest());
        Ret ret = srv.reg(getPara("phone"), getPara("pwds"), ip,getPara("nickname"));
        if (ret.isOk()) {
            ret.set("phone", getPara("phone"));
        }
        renderJson(ret);
    }

    /**
     * 显示还没激活页面
     */
    public void notActivated() {
        render("not_activated.html");
    }

//    /**
//     * 重发激活邮件
//     */
//    public void reSendActivateEmail() {
//        Ret ret = srv.reSendActivateEmail(getPara("email"));
//        renderJson(ret);
//    }

    /**
     * 激活，发送给用户注册邮箱中的带有 authCode 的激活链接指向该 action
     */
    public void activate() {
        Ret ret = srv.activate(getPara("authCode"));
        setAttr("ret", ret);
        render("activate.html");
    }

    public void captcha() {
        renderCaptcha();
    }

    /**
     * @return void
     * @Author Cc
     * @Description //TODO 短信发送
     * @Date 2020/3/16
     * @Param []
     **/
    @Clear
    public void sendMessage() throws Exception {
        String phone = getPara("phone");
        String reg = "^[1](([3|5|8][\\d])|([4][4,5,6,7,8,9])|([6][2,5,6,7])|([7][^9])|([9][1,8,9]))[\\d]{8}$";// 验证手机号
        if (!StrKit.isBlank(phone)) {
            boolean matches = Pattern.compile(reg).matcher(phone).matches();
            if (matches) {
                String msg = sendSMS(phone);
                if(Objects.equals("OK",msg)){
                    renderJson(Ret.ok("msg","短信发送成功"));
                }else{
                    renderJson(Ret.fail("msg",msg));
                }
            }
        } else {
            renderJson(Ret.fail("msg","手机号码错误!"));
        }
    }


    /**
     * 公共方法
     * 发送短信验证码
     *
     * @param phone 手机号码
     * @return
     */
    public String sendSMS(String phone) throws Exception {
        Integer sendCoeds = (int) ((Math.random() * 9 + 1) * 100000);
        String sendCoed = String.valueOf(sendCoeds);

//uoleem平台
/*        String urls = "http://api.uoleem.com.cn/sms/uoleemApi";// 应用地址
        String username = "shjieguan";// 账号
        String pwd = "Shjieguan";// 密码
        String mobile = phone;// 手机号码，多个号码使用","分割
        String content = "你的验证码为：" + sendCoed + "，该验证码5分钟内有效，请勿泄漏于他人。";
        String returnString = HttpSender.batchSend(urls, username, pwd, mobile, content);*/

//阿里平台
        String paramstring = "{\"code\":\"" + sendCoed + "\"}";
        String templatecode = "SMS_180054910";
        String str = "你的验证码为：" + sendCoed + "，该验证码5分钟内有效，请勿泄漏于他人。\n";
        String msg = HttpSender.sendSms("铁嘴网", templatecode, phone, paramstring);
        if(Objects.equals("OK",msg)){
            Map<String, String> map = new HashMap<>();
            map.put("SMSPhone", phone);
            map.put("SMSCode", sendCoed);
            setSessionAttr(phone, map);
        }
        return msg;
    }


}
