package com.hrs.service.impl;

import com.hrs.dao.UserDao;
import com.hrs.dao.impl.UserDaoImpl;
import com.hrs.model.entity.User;
import com.hrs.service.UserService;
import com.hrs.util.MD5Util;

/**   
* Copyright: Copyright (c) 2026 chinasofti
* 
* @ClassName: UserServiceImpl.java
* @Description: 用户业务逻辑实现类
*
* @version: v1.0.0
* @author: 黄红
* @date: 2026年4月13日 上午10:06:30 
*
* Modification History:
* Date         Author          Version            Description
*---------------------------------------------------------*
* 2026年4月13日     黄红           v1.0.0               新建文件
*/
public class UserServiceImpl implements UserService {

    private UserDao userDao = new UserDaoImpl();

    /**
     * 用户登录验证
     * @param username 用户名
     * @param password 明文密码
     * @param roleType 角色类型
     * @return 登录成功返回User对象，失败返回null
     */
    @Override
    public User login(String username, String password, String roleType) {
        // 1. 参数校验
        if (username == null || username.trim().isEmpty()) {
            return null;
        }
        if (password == null || password.trim().isEmpty()) {
            return null;
        }

        // 2. 密码加密
        String encryptedPassword = MD5Util.md5(password);

        // 3. 查询用户
        User user = userDao.findByUsernameAndPassword(username, encryptedPassword);

        // 4. 验证角色
        if (user != null && !user.getRoleType().equals(roleType)) {
            return null;
        }

        // 5. 验证账号状态
        if (user != null && "2".equals(user.getStatus())) {
            return null;
        }

        return user;
    }

    /**
     * 用户注册
     * @param user 用户信息
     * @param confirmPassword 确认密码
     * @return 注册结果和错误信息
     */
    @Override
    public RegisterResult register(User user, String confirmPassword) {
        RegisterResult result = new RegisterResult();

        // 1. 参数校验
        if (user.getUserName() == null || user.getUserName().trim().isEmpty()) {
            result.setSuccess(false);
            result.setMessage("用户名不能为空");
            return result;
        }

        if (user.getPassword() == null || user.getPassword().trim().isEmpty()) {
            result.setSuccess(false);
            result.setMessage("密码不能为空");
            return result;
        }

        // 2. 密码一致性校验
        if (!user.getPassword().equals(confirmPassword)) {
            result.setSuccess(false);
            result.setMessage("两次输入的密码不一致");
            return result;
        }

        // 3. 手机号格式校验
        if (user.getPhone() == null || !user.getPhone().matches("^1[3-9]\\d{9}$")) {
            result.setSuccess(false);
            result.setMessage("手机号格式不正确");
            return result;
        }

        // 4. 用户名唯一性校验
        User existUser = userDao.findByUsername(user.getUserName());
        if (existUser != null) {
            result.setSuccess(false);
            result.setMessage("用户名已存在");
            return result;
        }

        // 5. 手机号唯一性校验
        User existPhone = userDao.findByPhone(user.getPhone());
        if (existPhone != null) {
            result.setSuccess(false);
            result.setMessage("手机号已注册");
            return result;
        }

        // 6. 密码加密
        user.setPassword(MD5Util.md5(user.getPassword()));
        user.setStatus("0"); // 默认未认证

        // 7. 保存用户
        boolean success = userDao.add(user);
        result.setSuccess(success);
        result.setMessage(success ? "注册成功" : "注册失败，请稍后重试");

        return result;
    }
}
