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

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

import com.hypixel.hytale.server.npc.asset.builder.Builder;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.npc.asset.builder.BuilderManager;
import java.util.Iterator;
import com.hypixel.hytale.server.npc.asset.builder.Feature;
import java.util.EnumSet;
import com.hypixel.hytale.server.npc.asset.builder.FeatureEvaluatorHelper;

public class ReferenceProviderEvaluator implements FeatureProviderEvaluator, ParameterProviderEvaluator
{
    private final int referenceIndex;
    private final Class<?> classType;
    private FeatureEvaluatorHelper resolvedProviderSet;
    
    public ReferenceProviderEvaluator(final int referenceIndex, final Class<?> classType) {
        this.referenceIndex = referenceIndex;
        this.classType = classType;
    }
    
    @Override
    public boolean provides(final EnumSet<Feature> feature) {
        if (this.resolvedProviderSet == null) {
            return false;
        }
        for (final ProviderEvaluator evaluator : this.resolvedProviderSet.getProviders()) {
            if (evaluator instanceof FeatureProviderEvaluator && ((FeatureProviderEvaluator)evaluator).provides(feature)) {
                return true;
            }
        }
        return false;
    }
    
    @Override
    public boolean hasParameter(final String parameter, final ParameterType type) {
        if (this.resolvedProviderSet == null) {
            return false;
        }
        for (final ProviderEvaluator evaluator : this.resolvedProviderSet.getProviders()) {
            if (evaluator instanceof ParameterProviderEvaluator && ((ParameterProviderEvaluator)evaluator).hasParameter(parameter, type)) {
                return true;
            }
        }
        return false;
    }
    
    @Override
    public void resolveReferences(@Nonnull final BuilderManager manager) {
        final Builder<Object> referencedBuilder = manager.getCachedBuilder(this.referenceIndex, this.classType);
        this.resolvedProviderSet = referencedBuilder.getEvaluatorHelper();
    }
}
