package com.luozhihui.project.controller;

import com.luozhihui.project.common.ApiResponse;
import com.luozhihui.project.entity.User;
import com.luozhihui.project.mapper.UserRegMapper;
import com.luozhihui.project.mapper.PhoneMapper;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/api")
@CrossOrigin
public class UserRegController {
    @Resource
    UserRegMapper userRegMapper;

    @Resource
    PhoneMapper phoneMapper;

    @CrossOrigin
    @PostMapping("/user_register")
    public ApiResponse UserReg(User user, String code, @RequestHeader(name = "Content-Type", required = false) String contentType) {
        // 检查手机号是否已被注册
        if (isPhoneRegistered(user.getPhone())) {
            return new ApiResponse(null, 400, "该手机号已被注册");
        }

        // 用户输入的验证码校验逻辑
        List<String> codes = phoneMapper.findByCode(user.getPhone());
        if (codes != null && !codes.isEmpty()) {
            String storedCode = codes.get(0); // 获取存储在数据库中的验证码
            String userInputCode = user.getCode(); // 获取用户输入的验证码

            // 验证码匹配，执行注册操作
            if (codeMatches(userInputCode, storedCode)) {
                // 保存用户信息
                userRegMapper.save(user);
                // 注册成功后删除验证码
                deleteCode(user.getPhone());
                return new ApiResponse(null, 200, "注册成功");
            } else {
                // 验证码不匹配，返回错误消息
                return new ApiResponse(null, 400, "验证码不匹配");
            }
        } else {
            // 未找到匹配的验证码，返回错误消息
            return new ApiResponse(null, 400, "注册失败");
        }
    }

    // 校验用户输入的验证码和数据库中的验证码
    private boolean codeMatches(String userInputCode, String storedCode) {
        if (userInputCode == null || storedCode == null) {
            return false; // 如果任何一个验证码为null，返回false
        }
        return userInputCode.equals(storedCode);
    }

    // 检查手机号是否已被注册的方法
    private boolean isPhoneRegistered(String phone) {
        if (phone == null) {
            return false; // 如果手机号为null，返回false
        }
        // 在数据库中查询是否存在该手机号对应的用户记录
        User existingUser = userRegMapper.findByPhone(phone);

        // 如果查询结果不为null，表示手机号已被注册，返回true；否则返回false
        return existingUser != null;
    }

    // 删除验证码记录的方法
    private void deleteCode(String phone) {
        if (phone == null) {
            return; // 如果手机号为null，直接返回，不执行删除操作
        }
        // 在数据库中删除该手机号对应的验证码记录
        phoneMapper.deleteCode(phone);
    }
}
