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

package com.hypixel.hytale.builtin.hytalegenerator.density.nodes;

import java.util.List;
import javax.annotation.Nonnull;
import com.hypixel.hytale.builtin.hytalegenerator.density.Density;

public class SwitchDensity extends Density
{
    private Density[] inputs;
    @Nonnull
    private final int[] switchStates;
    
    public SwitchDensity(@Nonnull final List<Density> inputs, @Nonnull final List<Integer> switchStates) {
        if (inputs.size() != switchStates.size()) {
            throw new IllegalArgumentException("inputs and switch states have different sizes");
        }
        this.inputs = new Density[inputs.size()];
        this.switchStates = new int[switchStates.size()];
        inputs.toArray(this.inputs);
        for (int i = 0; i < switchStates.size(); ++i) {
            this.switchStates[i] = switchStates.get(i);
        }
    }
    
    @Override
    public double process(@Nonnull final Context context) {
        if (context == null) {
            return 0.0;
        }
        final int contextSwitchState = context.switchState;
        int i = 0;
        while (i < this.switchStates.length) {
            if (this.switchStates[i] == contextSwitchState) {
                final Density node = this.inputs[i];
                if (node == null) {
                    return 0.0;
                }
                return node.process(context);
            }
            else {
                ++i;
            }
        }
        return 0.0;
    }
    
    @Override
    public void setInputs(@Nonnull final Density[] inputs) {
        if (inputs.length == 0) {
            for (int i = 0; i < this.switchStates.length; ++i) {
                this.inputs[i] = null;
            }
        }
        else if (inputs.length < this.inputs.length) {
            System.arraycopy(inputs, 0, this.inputs, 0, inputs.length);
            for (int i = inputs.length; i < this.inputs.length; ++i) {
                this.inputs[i] = null;
            }
        }
        else {
            System.arraycopy(inputs, 0, this.inputs, 0, this.inputs.length);
        }
    }
}
