package com.sinosig.core.module.valuerule.validator.cid;

import lombok.extern.slf4j.Slf4j;
import com.sinosig.util.valuerule.DefaultValueRule;
import com.sinosig.util.valuerule.VRCondition;
import com.sinosig.util.valuerule.condition.*;
import com.sinosig.core.module.valuerule.anno.cid.CIDHsbf_jqxDefault;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.math.BigInteger;
import java.util.HashMap;
import java.math.BigDecimal;


/**
 * 值规则注解解析类
 * 实体：CID
 * 属性：Hsbf_jqx
 * 值规则：Default
 * 值规则信息：默认规则
 */
@Slf4j
@Component("CIDHsbf_jqxDefaultValidator")
public class CIDHsbf_jqxDefaultValidator implements ConstraintValidator<CIDHsbf_jqxDefault, BigDecimal>,Validator {
    private static final String MESSAGE = "值规则校验失败：【默认规则】";

    @Override
    public boolean isValid(BigDecimal value, ConstraintValidatorContext context) {
        boolean isValid = doValidate(value);
        if(!isValid) {
            context.disableDefaultConstraintViolation();
            context.buildConstraintViolationWithTemplate(MESSAGE)
                    .addConstraintViolation();
        }
        return doValidate(value);
    }

    @Override
    public boolean supports(Class<?> aClass) {
        return true;
    }

    @Override
    public void validate(Object o, Errors errors) {
        if( o!=null && supports(o.getClass())){
            if (!doValidate((BigDecimal) o)){
                errors.reject(MESSAGE);
            }
        }
    }

    public boolean doValidate(BigDecimal value) {
        DefaultValueRule<BigDecimal> valueRule = new DefaultValueRule<>("默认值规则",MESSAGE,"Hsbf_jqx",value)
                //字符串长度，重复检查模式，重复值范围，基础值规则，是否递归检查。
                .init(-1,"NONE",null,null,false);
        return valueRule.isValid();
    }
}

