// 
// 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 com.hypixel.hytale.server.npc.asset.builder.FeatureEvaluatorHelper;
import com.hypixel.hytale.server.npc.asset.builder.BuilderBase;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.npc.asset.builder.Feature;
import java.util.EnumSet;

public class RequiresOneOfFeaturesValidator extends RequiredFeatureValidator
{
    @Nonnull
    private final EnumSet<Feature> requiredFeature;
    @Nonnull
    private final String[] description;
    
    private RequiresOneOfFeaturesValidator(@Nonnull final EnumSet<Feature> requiredFeature) {
        this.requiredFeature = requiredFeature;
        this.description = BuilderBase.getDescriptionArray(requiredFeature);
    }
    
    @Override
    public boolean validate(@Nonnull final FeatureEvaluatorHelper evaluatorHelper) {
        for (final ProviderEvaluator provider : evaluatorHelper.getProviders()) {
            if (provider instanceof FeatureProviderEvaluator && ((FeatureProviderEvaluator)provider).provides(this.requiredFeature)) {
                return true;
            }
        }
        return false;
    }
    
    @Nonnull
    @Override
    public String getErrorMessage(final String context) {
        return String.format("At least one of required features %s must be provided at %s", String.join(", ", (CharSequence[])this.description), context);
    }
    
    @Nonnull
    public static RequiresOneOfFeaturesValidator withFeatures(@Nonnull final EnumSet<Feature> requiredFeature) {
        return new RequiresOneOfFeaturesValidator(requiredFeature);
    }
}
