package com.fs.his.validator.cpw;

import com.fs.common.exception.CustomException;
import com.fs.common.utils.StringUtils;
import com.fs.his.dto.CPWUserBaseInfoAddDTO;
import com.fs.his.utils.IdCardUtil;
import org.springframework.stereotype.Component;

/**
 * 用户基本信息校验器
 */
@Component
public class BaseInfoValidator implements Validator<CPWUserBaseInfoAddDTO> {

    @Override
    public void validate(CPWUserBaseInfoAddDTO userBaseInfo) {
        if (userBaseInfo == null) {
            throw new CustomException("用户基本信息不能为空", 400);
        }

        // 姓名校验
        validateRealName(userBaseInfo.getName());
        
        // 手机号校验
        validateUserPhone(userBaseInfo.getUserPhone());
        
        // 身份证校验
        //validateIdCard(userBaseInfo.getIdCard());
    }

    /**
     * 校验用户姓名
     */
    private void validateRealName(String realName) {
        if (StringUtils.isEmpty(realName)) {
            throw new CustomException("用户姓名不能为空", 400);
        }

        if (realName.length() < 2 || realName.length() > 20) {
            throw new CustomException("用户姓名长度必须在2-20个字符之间", 400);
        }

        if (realName.matches(".*\\d.*")) {
            throw new CustomException("用户姓名不能包含数字", 400);
        }

        if (realName.matches(".*[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>/?].*")) {
            throw new CustomException("用户姓名不能包含特殊字符", 400);
        }

        if (!realName.matches("^[\\u4e00-\\u9fa5a-zA-Z\\s]+$")) {
            throw new CustomException("用户姓名只能包含中文、英文和空格", 400);
        }
    }

    /**
     * 校验用户手机号
     */
    private void validateUserPhone(String userPhone) {
        if (StringUtils.isEmpty(userPhone)) {
            throw new CustomException("用户手机号不能为空", 400);
        }
        
        // 手机号必须是11位数字
        if (!userPhone.matches("^1[3-9]\\d{9}$")) {
            throw new CustomException("用户手机号格式不正确，必须是11位手机号", 400);
        }
    }

    /**
     * 校验身份证
     */
    private void validateIdCard(String idCard) {
        if (StringUtils.isEmpty(idCard)) {
            throw new CustomException("用户身份证不能为空", 400);
        }

        if (!IdCardUtil.isValidIdCard(idCard)) {
            throw new CustomException("用户身份证格式不正确", 400);
        }
    }
}