package io.delphiplatform.api.v3.validation;

import org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorContextImpl;

import java.util.Set;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import io.delphiplatform.api.util.CollectionUtils;
import io.delphiplatform.api.v3.constant.ApplicationConstants;

public class ExactMatchesValidatorForSingleValue implements ConstraintValidator<ExactMatchesForSingleValue, String> {

    private Set<String> anyOf;

    @Override
    public void initialize(ExactMatchesForSingleValue constraintAnnotation) {
        this.anyOf = Set.of(constraintAnnotation.anyOf());
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        boolean isValid = CollectionUtils.isEmpty(value) || anyOf.contains(value);
        if (!isValid) {
            ((ConstraintValidatorContextImpl) context)
                .addMessageParameter(ApplicationConstants.ALLOWED_VALUES_PLACEHOLDER, anyOf);
        }
        return isValid;
    }
}
