// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.server.npc.asset.builder.validators;

import java.util.Iterator;
import com.hypixel.hytale.server.npc.asset.builder.providerevaluators.FeatureProviderEvaluator;
import com.hypixel.hytale.server.npc.asset.builder.providerevaluators.ProviderEvaluator;
import javax.annotation.Nullable;
import com.hypixel.hytale.server.npc.asset.builder.FeatureEvaluatorHelper;
import com.hypixel.hytale.server.npc.asset.builder.BuilderBase;
import com.hypixel.hytale.server.npc.asset.builder.Feature;
import java.util.EnumSet;
import javax.annotation.Nonnull;
import java.util.function.Supplier;

public class RequiresFeatureIfEnumValidator<E extends Enum<E> & Supplier<String>> extends RequiredFeatureValidator
{
    @Nonnull
    private final String[] description;
    private final String attribute;
    private final E value;
    
    private RequiresFeatureIfEnumValidator(final String attribute, final E value, @Nonnull final EnumSet<Feature> feature) {
        this.attribute = attribute;
        this.description = BuilderBase.getDescriptionArray(feature);
        this.value = value;
    }
    
    @Override
    public boolean validate(final FeatureEvaluatorHelper evaluatorHelper) {
        return false;
    }
    
    @Nullable
    @Override
    public String getErrorMessage(final String context) {
        return null;
    }
    
    public static <E extends Enum<E> & Supplier<String>> boolean staticValidate(@Nonnull final FeatureEvaluatorHelper evaluatorHelper, final EnumSet<Feature> requiredFeature, final E requiredValue, final E value) {
        if (requiredValue != value) {
            return true;
        }
        for (final ProviderEvaluator providedFeature : evaluatorHelper.getProviders()) {
            if (providedFeature instanceof FeatureProviderEvaluator && ((FeatureProviderEvaluator)providedFeature).provides(requiredFeature)) {
                return true;
            }
        }
        return false;
    }
    
    @Nonnull
    public static <E extends Enum<E> & Supplier<String>> RequiresFeatureIfEnumValidator withAttributes(final String attribute, final E value, @Nonnull final EnumSet<Feature> feature) {
        return new RequiresFeatureIfEnumValidator(attribute, (E)value, feature);
    }
}
