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

package com.hypixel.hytale.builtin.hytalegenerator.materialproviders;

import javax.annotation.Nullable;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Nonnull;

public class TerrainDensityMaterialProvider<V> extends MaterialProvider<V>
{
    @Nonnull
    private final FieldDelimiter<V>[] fieldDelimiters;
    
    public TerrainDensityMaterialProvider(@Nonnull final List<FieldDelimiter<V>> delimiters) {
        this.fieldDelimiters = new FieldDelimiter[delimiters.size()];
        for (final FieldDelimiter<V> field : delimiters) {
            if (field == null) {
                throw new IllegalArgumentException("delimiters contain null value");
            }
        }
        for (int i = 0; i < delimiters.size(); ++i) {
            this.fieldDelimiters[i] = delimiters.get(i);
        }
    }
    
    @Nullable
    @Override
    public V getVoxelTypeAt(@Nonnull final Context context) {
        for (final FieldDelimiter<V> delimiter : this.fieldDelimiters) {
            if (delimiter.isInside(context.density)) {
                return delimiter.materialProvider.getVoxelTypeAt(context);
            }
        }
        return null;
    }
    
    public static class FieldDelimiter<V>
    {
        double top;
        double bottom;
        MaterialProvider<V> materialProvider;
        
        public FieldDelimiter(@Nonnull final MaterialProvider<V> materialProvider, final double bottom, final double top) {
            this.bottom = bottom;
            this.top = top;
            this.materialProvider = materialProvider;
        }
        
        boolean isInside(final double fieldValue) {
            return fieldValue < this.top && fieldValue >= this.bottom;
        }
    }
}
