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

package com.hypixel.hytale.server.worldgen.container;

import com.hypixel.hytale.server.worldgen.util.bounds.IChunkBounds;
import com.hypixel.hytale.math.util.MathUtil;
import com.hypixel.hytale.server.worldgen.prefab.PrefabPatternGenerator;
import com.hypixel.hytale.server.worldgen.loader.WorldGenPrefabSupplier;
import com.hypixel.hytale.common.map.IWeightedMap;
import javax.annotation.Nonnull;
import java.util.Arrays;

public class PrefabContainer
{
    private final PrefabContainerEntry[] entries;
    private final int maxSize;
    
    public PrefabContainer(final PrefabContainerEntry[] entries) {
        this.entries = entries;
        this.maxSize = getMaxSize(entries);
    }
    
    public PrefabContainerEntry[] getEntries() {
        return this.entries;
    }
    
    public int getMaxSize() {
        return this.maxSize;
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "PrefabContainer{entries=" + Arrays.toString(this.entries);
    }
    
    private static int getMaxSize(final PrefabContainerEntry[] entries) {
        int max = 0;
        for (final PrefabContainerEntry entry : entries) {
            max = Math.max(max, entry.getPrefabPatternGenerator().getMaxSize());
        }
        return max;
    }
    
    public static class PrefabContainerEntry
    {
        protected final IWeightedMap<WorldGenPrefabSupplier> prefabs;
        protected final PrefabPatternGenerator prefabPatternGenerator;
        protected final int environmentId;
        protected int extend;
        
        public PrefabContainerEntry(final IWeightedMap<WorldGenPrefabSupplier> prefabs, final PrefabPatternGenerator prefabPatternGenerator, final int environmentId) {
            this.extend = -1;
            this.prefabs = prefabs;
            this.prefabPatternGenerator = prefabPatternGenerator;
            this.environmentId = environmentId;
        }
        
        public IWeightedMap<WorldGenPrefabSupplier> getPrefabs() {
            return this.prefabs;
        }
        
        public int getEnvironmentId() {
            return this.environmentId;
        }
        
        public int getExtents() {
            if (this.extend == -1) {
                int max = 0;
                for (final WorldGenPrefabSupplier supplier : this.prefabs.internalKeys()) {
                    final IChunkBounds bounds = supplier.getBounds(supplier.get());
                    final int lengthX = bounds.getHighBoundX() - bounds.getLowBoundX();
                    final int lengthZ = bounds.getHighBoundZ() - bounds.getLowBoundZ();
                    max = MathUtil.maxValue(max, lengthX, lengthZ);
                }
                this.extend = max;
            }
            return this.extend;
        }
        
        public PrefabPatternGenerator getPrefabPatternGenerator() {
            return this.prefabPatternGenerator;
        }
        
        @Nonnull
        @Override
        public String toString() {
            return "PrefabContainerEntry{prefabs=" + String.valueOf(this.prefabs) + ", prefabPatternGenerator=" + String.valueOf(this.prefabPatternGenerator) + ", extend=" + this.extend;
        }
    }
}
