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

package com.hypixel.hytale.server.npc.sensorinfo;

import java.util.HashMap;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Map;
import com.hypixel.hytale.server.npc.sensorinfo.parameterproviders.ParameterProvider;

public abstract class InfoProviderBase implements InfoProvider
{
    protected final ParameterProvider parameterProvider;
    @Nullable
    protected final Map<Class<? extends ExtraInfoProvider>, ExtraInfoProvider> extraProviders;
    protected ExtraInfoProvider passedExtraInfo;
    
    public InfoProviderBase() {
        this(null);
    }
    
    public InfoProviderBase(final ParameterProvider parameterProvider) {
        this.parameterProvider = parameterProvider;
        this.extraProviders = null;
    }
    
    public InfoProviderBase(final ParameterProvider parameterProvider, @Nonnull final ExtraInfoProvider... providers) {
        this.parameterProvider = parameterProvider;
        this.extraProviders = new HashMap<Class<? extends ExtraInfoProvider>, ExtraInfoProvider>();
        for (final ExtraInfoProvider provider : providers) {
            if (this.extraProviders.put(provider.getType(), provider) != null) {
                throw new IllegalArgumentException("More than one type of " + provider.getType().getSimpleName() + " provider registered!");
            }
        }
    }
    
    @Nullable
    @Override
    public ParameterProvider getParameterProvider(final int parameter) {
        if (this.parameterProvider == null) {
            return null;
        }
        return this.parameterProvider.getParameterProvider(parameter);
    }
    
    @Nullable
    @Override
    public <E extends ExtraInfoProvider> E getExtraInfo(final Class<E> clazz) {
        if (this.extraProviders == null) {
            return null;
        }
        return (E)this.extraProviders.get(clazz);
    }
    
    @Override
    public <E extends ExtraInfoProvider> void passExtraInfo(final E provider) {
        this.passedExtraInfo = provider;
    }
    
    @Override
    public <E extends ExtraInfoProvider> E getPassedExtraInfo(final Class<E> clazz) {
        return (E)this.passedExtraInfo;
    }
}
