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

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

import com.hypixel.hytale.server.npc.sensorinfo.parameterproviders.ParameterProvider;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import javax.annotation.Nullable;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.npc.instructions.Sensor;
import java.util.List;

public class WrappedInfoProvider implements InfoProvider
{
    @Nonnull
    private final List<Sensor> sensors;
    @Nullable
    private IPositionProvider positionMatch;
    protected ExtraInfoProvider passedExtraInfo;
    
    public WrappedInfoProvider() {
        this.sensors = new ObjectArrayList<Sensor>();
    }
    
    public WrappedInfoProvider(final Sensor[] sensors) {
        this.sensors = List.of(sensors);
    }
    
    @Nullable
    @Override
    public <E extends ExtraInfoProvider> E getExtraInfo(final Class<E> clazz) {
        for (int i = 0; i < this.sensors.size(); ++i) {
            final InfoProvider info = this.sensors.get(i).getSensorInfo();
            if (info != null) {
                final E specificInfo = info.getExtraInfo(clazz);
                if (specificInfo != null) {
                    return specificInfo;
                }
            }
        }
        return null;
    }
    
    @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;
    }
    
    @Override
    public boolean hasPosition() {
        return this.positionMatch != null && this.positionMatch.hasPosition();
    }
    
    @Nullable
    @Override
    public IPositionProvider getPositionProvider() {
        return this.positionMatch;
    }
    
    @Nullable
    @Override
    public ParameterProvider getParameterProvider(final int parameter) {
        return null;
    }
    
    public void clearMatches() {
        this.sensors.clear();
    }
    
    public void addMatch(final Sensor sensor) {
        this.sensors.add(sensor);
    }
    
    public void clearPositionMatch() {
        this.positionMatch = null;
    }
    
    public void setPositionMatch(final IPositionProvider provider) {
        this.positionMatch = provider;
    }
}
