package no.valg.valgnatt.backend.rapport;

import java.math.BigDecimal;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

/**
 * Klassen er en enkel wrapper omkring google.gson.JsonObject. Den tilbyr følgende:
 * 1. En forenkling av hvordan man legger til et JsonObjectWrapper til et JsonObject (1 kodelinje vs 2 kodelinjer)
 * 2. En håndtering av hvordan man legger til et tall som er formatert (og derfor kommer som en string), også håndtering av null-tilfellet
 * Mao: Klassen har sitt bruksområde i *oppbygging* av et json-objekt (dvs. rapporter og eksportskjema)
 */
public class JsonObjectWrapper {
	private JsonObject jsonObject = new JsonObject();

	public void leggTilString(String nøkkel, String verdi) {
		jsonObject.addProperty(nøkkel, verdi);
	}

	void leggTilBool(String nøkkel, boolean verdi) {
		jsonObject.addProperty(nøkkel, verdi);
	}

	void leggTilTall(String nøkkel, String verdi) {
		if (verdi == null) {
			jsonObject.addProperty(nøkkel, (Number) null);
		} else {
			jsonObject.addProperty(nøkkel, new BigDecimal(verdi));
		}

	}

	public void leggTilTall(String nøkkel, Number verdi) {
		jsonObject.addProperty(nøkkel, verdi);
	}

	JsonObjectWrapper leggTilObjekt(String nøkkel) {
		JsonObjectWrapper nyttObjekt = new JsonObjectWrapper();
		jsonObject.add(nøkkel, nyttObjekt.getJsonObject());
		return nyttObjekt;
	}

	public JsonObject getJsonObject() {
		return jsonObject;
	}

	// Litt rar denne, men det er ikke nødvendig å lage et RapportTabell-objekt for å wrappe JsonArray, siden JsonArray brukes så lite
	public JsonArray leggTilTabell(String nøkkel) {
		JsonArray jsonArray = new JsonArray();
		jsonObject.add(nøkkel, jsonArray);
		return jsonArray;
	}


}
