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

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

import javax.annotation.Nonnull;
import com.google.gson.JsonObject;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import java.nio.file.Path;
import com.hypixel.hytale.procedurallib.json.SeedString;
import com.hypixel.hytale.math.vector.Vector3d;
import com.hypixel.hytale.server.worldgen.SeedStringResource;
import com.hypixel.hytale.procedurallib.json.JsonLoader;

public class Vector3dJsonLoader extends JsonLoader<SeedStringResource, Vector3d>
{
    public Vector3dJsonLoader(final SeedString<SeedStringResource> seed, final Path dataFolder, final JsonElement json) {
        super(seed, dataFolder, json);
    }
    
    @Nonnull
    @Override
    public Vector3d load() {
        if (this.json == null || this.json.isJsonNull()) {
            return new Vector3d();
        }
        if (this.json.isJsonArray()) {
            final JsonArray array = this.json.getAsJsonArray();
            if (array.isEmpty()) {
                return new Vector3d();
            }
            if (array.size() == 1) {
                final double value = array.get(0).getAsDouble();
                return new Vector3d(value, value, value);
            }
            final double x = array.get(0).getAsDouble();
            final double y = array.get(1).getAsDouble();
            final double z = array.get(2).getAsDouble();
            return new Vector3d(x, y, z);
        }
        else {
            if (this.json.isJsonObject()) {
                final JsonObject object = this.json.getAsJsonObject();
                final double x = object.get("X").getAsDouble();
                final double y = object.get("Y").getAsDouble();
                final double z = object.get("Z").getAsDouble();
                return new Vector3d(x, y, z);
            }
            throw new Error("No valid definition for Vector3d found!");
        }
    }
    
    public interface Constants
    {
        public static final String KEY_X = "X";
        public static final String KEY_Y = "Y";
        public static final String KEY_Z = "Z";
    }
}
