
package org.tio.sitexxx.server.controller.base.sms;

import cn.hutool.core.lang.Validator;
import com.anji.captcha.model.vo.CaptchaVO;
import org.tio.http.common.HttpRequest;
import org.tio.http.server.annotation.RequestPath;
import org.tio.jfinal.kit.Ret;
import org.tio.sitexxx.service.api.sms.BaseSmsVo;
import org.tio.sitexxx.service.model.main.User;
import org.tio.sitexxx.service.service.base.UserService;
import org.tio.sitexxx.service.service.base.sms.SmsService;
import org.tio.sitexxx.service.utils.RetUtils;
import org.tio.sitexxx.service.vo.Const;
import org.tio.utils.resp.Resp;

/**
 * 
 * 短信
 * @author xufei
 * 2020年12月18日 下午1:39:38
 */
@RequestPath(value = "/sms")
public class SmsController {
	/**
	 * @param biztype
	 * @param mobile
	 * @author xufei
	 * 2020年12月24日 下午4:56:49
	 * @return
	 */
	public static Resp bizPhoneCheck(Short biztype, String mobile) {
		if(!Const.SMS_OPENFLAG) {
			return Resp.ok();
		}
		if (biztype == null || mobile == null) {
			return RetUtils.getInvalidResp();
		}
		if (!Validator.isMobile(mobile)) {
			return Resp.fail().msg("无效手机号");
		}
		switch (biztype) {
			case BaseSmsVo.BaseSmsBizType.REGISTER:
			case BaseSmsVo.BaseSmsBizType.BIND_NEW_PHONE:
			case BaseSmsVo.BaseSmsBizType.BIND_PHONE:
				User register = UserService.ME.getByPhone(mobile, null);
				if (register != null) {
					return Resp.fail("手机号已注册");
				}
				break;
			case BaseSmsVo.BaseSmsBizType.PWD_BACK:
			case BaseSmsVo.BaseSmsBizType.PWD_PAY_BACK:
			case BaseSmsVo.BaseSmsBizType.PWD_UPDATE:
			case BaseSmsVo.BaseSmsBizType.OLD_PHONE_CHECK:
			case BaseSmsVo.BaseSmsBizType.LOGIN:
			case BaseSmsVo.BaseSmsBizType.LOGOUT:
				User login = UserService.ME.getByPhone(mobile, null);
				if (login == null) {
					return Resp.fail("手机号未注册");
				}
				break;
			default:
		}
		return Resp.ok();
	}

	/**
	 * 发送短信
	 * @param type
	 * @param request
	 * @return
	 * @throws Exception
	 * @author xufei
	 * 2020年12月10日 下午2:59:54
	 */
	@RequestPath(value = "/send")
	public Resp send(CaptchaVO captchaVO, Short biztype, String mobile, HttpRequest request) throws Exception {
		if(!Const.SMS_OPENFLAG) {
			return Resp.ok(RetUtils.OPER_RIGHT);
		}
		if (biztype == null || mobile == null || captchaVO == null) {
			return RetUtils.getInvalidResp();
		}
		String ip = request.getClientIp();
		String sessionid = request.getHttpSession().getId();
		String referer = request.getReferer();
		Ret ret = SmsService.me.send(mobile, biztype, ip, sessionid, referer, "", null);
		if (ret.isFail()) {
			return Resp.fail().msg(RetUtils.getRetMsg(ret));
		}
		return Resp.ok(RetUtils.OPER_RIGHT);
	}

	/**
	 * 手机短信前检查
	 * @param biztype
	 * @param mobile
	 * @return
	 * @author xufei
	 * 2020年12月16日 下午4:06:10
	 */
	@RequestPath(value = "/beforeCheck")
	public Resp beforeCheck(Short biztype, String mobile) {
		return bizPhoneCheck(biztype, mobile);
	}

	/**
	 * 验证短信code
	 * @param code
	 * @return
	 * @throws Exception
	 * @author xufei
	 * 2020年12月10日 下午2:59:56
	 */
	@RequestPath(value = "/check")
	public Resp check(Short biztype, String mobile, String code) throws Exception {
		if(!Const.SMS_OPENFLAG) {
			return Resp.ok("验证码正确");
		}
		Ret ret = SmsService.me.checkCode(mobile, biztype, code, null, false);
		if (ret.isFail()) {
			return Resp.fail().msg(RetUtils.getRetMsg(ret));
		}
		return Resp.ok("验证码正确");
	}
}
