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

package com.hypixel.hytale.server.worldgen.loader.cave.shape;

import javax.annotation.Nullable;
import com.hypixel.hytale.server.worldgen.loader.prefab.BlockPlacementMaskJsonLoader;
import com.hypixel.hytale.server.worldgen.util.condition.BlockMaskCondition;
import java.util.Iterator;
import com.google.gson.JsonArray;
import com.hypixel.hytale.server.worldgen.loader.WorldGenPrefabLoader;
import java.util.Collection;
import java.util.Collections;
import java.util.ArrayList;
import com.hypixel.hytale.server.worldgen.loader.WorldGenPrefabSupplier;
import java.util.List;
import com.hypixel.hytale.server.worldgen.cave.shape.PrefabCaveNodeShape;
import com.google.gson.JsonElement;
import java.nio.file.Path;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.worldgen.SeedStringResource;
import com.hypixel.hytale.procedurallib.json.SeedString;

public class PrefabCaveNodeShapeGeneratorJsonLoader extends CaveNodeShapeGeneratorJsonLoader
{
    public PrefabCaveNodeShapeGeneratorJsonLoader(@Nonnull final SeedString<SeedStringResource> seed, final Path dataFolder, final JsonElement json) {
        super(seed.append(".PrefabCaveNodeShapeGenerator"), dataFolder, json);
    }
    
    @Nonnull
    @Override
    public PrefabCaveNodeShape.PrefabCaveNodeShapeGenerator load() {
        return new PrefabCaveNodeShape.PrefabCaveNodeShapeGenerator(this.loadPrefabs(), this.loadMask());
    }
    
    @Nonnull
    protected List<WorldGenPrefabSupplier> loadPrefabs() {
        final WorldGenPrefabLoader loader = ((SeedStringResource)this.seed.get()).getLoader();
        final List<WorldGenPrefabSupplier> prefabs = new ArrayList<WorldGenPrefabSupplier>();
        final JsonElement prefabElement = this.get("Prefab");
        if (prefabElement.isJsonArray()) {
            final JsonArray prefabArray = prefabElement.getAsJsonArray();
            for (final JsonElement prefabArrayElement : prefabArray) {
                final String prefabString = prefabArrayElement.getAsString();
                Collections.addAll(prefabs, loader.get(prefabString));
            }
        }
        else {
            final String prefabString2 = prefabElement.getAsString();
            Collections.addAll(prefabs, loader.get(prefabString2));
        }
        if (prefabs.isEmpty()) {
            throw new IllegalArgumentException("Prefabs are empty! Key: Prefab");
        }
        return prefabs;
    }
    
    @Nullable
    protected BlockMaskCondition loadMask() {
        BlockMaskCondition configuration = BlockMaskCondition.DEFAULT_TRUE;
        if (this.has("Mask")) {
            configuration = new BlockPlacementMaskJsonLoader((SeedString<SeedStringResource>)this.seed, this.dataFolder, this.getRaw("Mask")).load();
        }
        return configuration;
    }
    
    public interface Constants
    {
        public static final String KEY_PREFAB = "Prefab";
        public static final String KEY_MASK = "Mask";
    }
}
