package cn.iocoder.yudao.module.rescue.utils;

import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.util.RedisCache;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.util.SendSmsUtil;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Random;
import java.util.concurrent.TimeUnit;

import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;

@Component
public class RescueSysLoginService {

    @Resource
    private AdminUserApi adminUserApi;

    @Resource
    @Lazy
    private RedisCache redisCache2;

    public CommonResult loginSmsCode(String phone){
        String msg;
        AdminUserDO userDO = new AdminUserDO();
        userDO.setMobile(phone);
        if (ObjectUtil.isEmpty(adminUserApi.getUserByMobile(phone))){
            msg = "手机号'" + phone + "不存在请先注册";
            return error(500, msg);
        }
        String msgCode = generateVerificationCode();
        redisCache2.setCacheObject(phone+"-loginCode",msgCode,300, TimeUnit.SECONDS);
        SendSmsUtil.sendMsg(msgCode,phone,"1400852709","机动车管家小程序","1917285");
        return success("验证码成功生成");

    }

    public static String generateVerificationCode() {
        // 设置验证码长度
        int codeLength = 6;
        // 设置验证码字符源
        String codeSource = "0123456789";
        // 生成随机数对象
        Random random = new Random();
        StringBuilder verificationCode = new StringBuilder();

        // 随机生成验证码
        for (int i = 0; i < codeLength; i++) {
            int index = random.nextInt(codeSource.length());
            char codeChar = codeSource.charAt(index);
            verificationCode.append(codeChar);
        }

        return verificationCode.toString();
    }

    public CommonResult pwdSmsCode(String phone) {
        String msg;
        AdminUserDO userDO = new AdminUserDO();
        userDO.setMobile(phone);
        if (ObjectUtil.isNotEmpty(adminUserApi.getUserByMobile(phone))){
            msg = "手机号" + phone + "不存在";
            return  error(500, msg);
        }
        String msgCode = generateVerificationCode();
        redisCache2.setCacheObject(phone+"-pwdCode",msgCode,300, TimeUnit.SECONDS);
        SendSmsUtil.sendMsg(msgCode,phone,"1400852709","机动车管家小程序","1917285");
        return success("验证码成功生成");
    }

//    /**
//     * 检测模块微信登录
//     *
//     * @param decryptResult 登录凭证 只能用一次
//     * @return
//     */
//    public String wxLoginRescue(String decryptResult,String openId,Long inviteId){
//        //字符串转json
//        JSONObject jsonObject = JSONObject.parseObject(decryptResult);
//        System.out.println(jsonObject);
//        System.out.println("openId"+openId);
//        String phoneNumber =  jsonObject.getString("phoneNumber");
//        //还可以获取其他信息
//        //根据openid判断数据库中是否有该用户
//        //根据openid查询用户信息
//        AdminUserRespDTO wxUser = adminUserApi.getUserByMobile(phoneNumber);
//        //如果查不到，则新增，查到了，则更新
//        UserDTO user = new UserDTO();
//        if (wxUser == null) {
//            // 新增
//            user.setUsername(phoneNumber);
//            user.setNickname(phoneNumber);
//            user.setMobile(phoneNumber);
//            user.setPassword(SecurityUtils.encryptPassword("654321"));
//            user.setRescueOpenId(openId);
//            user.setCreateTime(DateUtils.getNowDate());
//            if (null!=inviteId){
//
//                //绑定上级
//                user.setInviteId(inviteId);
//                //给上级进行积分奖励
//                userBalanceService.inviteRewards(inviteId);
//            }
//            //新增 用户
//            SysRole role = roleService.selectRoleByCode("jcyh");
//            user.setRoleIds(new Long[]{role.getRoleId()});
//            user.setDeptId(100L);
//            userService.insertUser(user);
//        }else {
//            //更新
//            user = wxUser;
//            user.setNickName(phoneNumber);
//            user.setPhonenumber(phoneNumber);
//            user.setRescueOpenId(openId);
//            user.setUpdateTime(DateUtils.getNowDate());
//            if (ObjectUtil.isEmpty(user.getInviteId())){
//                if (null!=inviteId){
//                    //绑定上级
//                    user.setInviteId(inviteId);
//                    //给上级进行积分奖励
//                    userBalanceService.inviteRewards(inviteId);
//                }
//            }
//            userMapper.updateUser(user);
//        }
//
//        //组装token信息
//        LoginUser loginUser = new LoginUser();
//        loginUser.setOpenId(openId);
//        //如果有的话设置
//        loginUser.setUser(user);
//        loginUser.setUserId(user.getUserId());
//
//        // 生成token
//        return tokenService.createToken(loginUser);
//    }
}
