package tourplaner.business;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import tourplaner.object.Tour;

import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;

/**
 * Hilfsklasse für Json (Gson)
 */
public class JsonHelper {

    /**
     * String aus json extrahieren
     * @param json Json als String
     * @param gets Eintrag im Json unter "route"
     * @return Gesammelter String
     */
    public static String getStingFromJson(String json, String gets){
        return getJObj(json).get("route").getAsJsonObject().get(gets).getAsString();
    }

    /**
     * Double aus json extrahieren
     * @param json Json als String
     * @param gets Eintrag im Json unter "route"
     * @return Gesammelter Double Wert
     */
    public static double getDoubleFromJson(String json, String gets){
        return getJObj(json).get("route").getAsJsonObject().get(gets).getAsDouble();
    }

    /**
     * Erzeugt ein Json aus einem Object
     * @param obj Das Objekt
     * @return Json des Objektes
     */
    public static String getJsonFromObj(Object obj){
        return new Gson().toJson(obj);
    }

    /**
     * Erzeugt ein Json aus einem Object
     * @param obj Das Objekt
     * @param writer File in das geschrieben werden soll
     */
    public static void getJsonFromObj(Object obj , FileWriter writer){
        new Gson().toJson(obj, writer);
    }

    /**
     * Wandelt ein Json file in ein Data Objekt um
     * @param reader File aus dem gelesen wird
     * @return Data objekt das gelesen wurde
     */
    public static ArrayList<Tour> getTourenFromJson(FileReader reader){
        return new Gson().fromJson(reader, new TypeToken<ArrayList<Tour>>() {}.getType());
    }

    /**
     * Json String to JsonObject
     * @param json Json string
     * @return Neues JsonObject aus String
     */
    private static JsonObject getJObj(String json){
       return new Gson().fromJson(json, JsonObject.class);
    }
}
