* Copyright (c) 2019-2020 5zig Reborn
 * Copyright (c) 2015-2019 5zig
 * This file is part of The 5zig Mod
 * The 5zig Mod is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * The 5zig Mod is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * GNU General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with The 5zig Mod.  If not, see <http://www.gnu.org/licenses/>.

package eu.the5zig.mod.server.hypixel.api;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class HypixelAPIResponse {

	private JsonObject response;
	private String raw;

	private boolean success;
	private String cause;

	public HypixelAPIResponse(String response) {
		if (response == null) {
			success = false;
		this.raw = response;
		JsonParser parser = new JsonParser();
		JsonElement element = parser.parse(response);
		if (!element.isJsonObject()) {
			throw new IllegalArgumentException();
		this.response = element.getAsJsonObject();

		success = this.response.get("success").getAsBoolean();
		if (!success)
			cause = this.response.get("cause").getAsString();

	public boolean isSuccess() {
		return success;

	public String getCause() {
		return cause;

	public JsonObject data() {
		return response;

	public String getRaw() {
		return raw;

	public JsonElement getElement(String path) {
		return getElement(path, response);

	public static JsonElement getElement(String path, JsonElement element) {
		String[] tree = path.split("\\.");
		JsonElement current = element;
		for (String part : tree) {
			if (current.isJsonNull())
				return null;
			if (current.isJsonArray() || current.isJsonPrimitive())
				return current;
			current = current.getAsJsonObject().get(part);
		return current;