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

package com.hypixel.hytale.server.worldgen.loader.climate;

import com.google.gson.JsonArray;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.worldgen.climate.ClimateType;
import com.google.gson.JsonElement;
import java.nio.file.Path;
import com.hypixel.hytale.procedurallib.json.SeedString;
import com.hypixel.hytale.server.worldgen.climate.ClimateGraph;
import com.hypixel.hytale.procedurallib.json.JsonLoader;
import com.hypixel.hytale.procedurallib.json.SeedResource;

public class ClimateGraphJsonLoader<K extends SeedResource> extends JsonLoader<K, ClimateGraph>
{
    public ClimateGraphJsonLoader(final SeedString<K> seed, final Path dataFolder, final JsonElement json) {
        super(seed, dataFolder, json);
    }
    
    @Nonnull
    @Override
    public ClimateGraph load() {
        final ClimateType[] climates = this.loadClimates();
        final ClimateGraph.FadeMode fadeMode = this.loadFadeMode();
        final double fadeRadius = this.loadFadeRadius();
        final double fadeDistance = this.loadFadeDistance();
        return new ClimateGraph(512, climates, fadeMode, fadeRadius, fadeDistance);
    }
    
    protected ClimateGraph.FadeMode loadFadeMode() {
        final String fadeMode = this.mustGetString("FadeMode", Constants.DEFAULT_FADE_MODE);
        return ClimateGraph.FadeMode.valueOf(fadeMode);
    }
    
    protected double loadFadeRadius() {
        return this.mustGetNumber("FadeRadius", Constants.DEFAULT_FADE_RADIUS).doubleValue();
    }
    
    protected double loadFadeDistance() {
        return this.mustGetNumber("FadeDistance", Constants.DEFAULT_FADE_DISTANCE).doubleValue();
    }
    
    @Nonnull
    protected ClimateType[] loadClimates() {
        final JsonArray climatesArr = this.mustGetArray("Climates", Constants.DEFAULT_CLIMATES);
        final ClimateType[] climates = new ClimateType[climatesArr.size()];
        for (int i = 0; i < climatesArr.size(); ++i) {
            final JsonElement climateJson = climatesArr.get(i);
            climates[i] = new ClimateTypeJsonLoader(this.seed, this.dataFolder, climateJson, null).load();
        }
        return climates;
    }
    
    public interface Constants
    {
        public static final String KEY_CLIMATE = "Climate";
        public static final String KEY_FADE_MODE = "FadeMode";
        public static final String KEY_FADE_RADIUS = "FadeRadius";
        public static final String KEY_FADE_DISTANCE = "FadeDistance";
        public static final String KEY_CLIMATES = "Climates";
        public static final JsonArray DEFAULT_CLIMATES = new JsonArray();
        public static final Double DEFAULT_FADE_RADIUS = 50.0;
        public static final Double DEFAULT_FADE_DISTANCE = 100.0;
        public static final String DEFAULT_FADE_MODE = ClimateGraph.FadeMode.CHILDREN.name();
    }
}
