package at.reisinger.server.helper;

import at.reisinger.obj.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.List;
import java.util.Map;

/**
 * Hilfsfunktionen für Jackson Json
 */
public class JsonHelper {

    /**
     * Wandelt ein Objekt in ein Json um
     * @param obj Objekt das in ein Json umgewandelt werden soll
     * @return Json String des Packages
     */
    public static String objToJson(Object obj){
        ObjectMapper objectMapper = new ObjectMapper();
        String packageJson = "";
        if(obj != null) {
            try {
                packageJson += objectMapper.writeValueAsString(obj);
            } catch (JsonProcessingException e) {
                packageJson = "Error: JsonProcessingException -> " + e.getMessage();
            }
            return packageJson;
        }else{
            return null;
        }
    }

    /**
     * Json zu List
     * @param payload Json String
     * @return List aus dem json, bei einer JsonProcessingException null
     */
    public static List<String> jsonPayloadToList(String payload){
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            return objectMapper.readValue(payload, new TypeReference<>() {
            });
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Json zu Map
     * @param payload Json String
     * @return Map aus dem json, bei einer JsonProcessingException null
     */
    public static Map<String, Object> jsonPayloadToMap(String payload){
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            return objectMapper.readValue(payload, new TypeReference<>() {
            });
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Wandelt ein Objekt in ein Json um
     * @param user Objekt das in ein Json umgewandelt werden soll
     * @return Json String des Packages
     */
    public static String userToJson(User user){
        return objToJson(user);
    }

}
