/*
 * (c) 2020 Pluto Inc.
 */
package tv.pluto.mongo.utils.json;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class LocalDateTimeAdapter
    implements JsonDeserializer<LocalDateTime>, JsonSerializer<LocalDateTime> {

  @Override
  public JsonElement serialize(
      LocalDateTime dateTime, Type type, JsonSerializationContext jsonSerializationContext) {
    return new JsonPrimitive(dateTime.format(DateTimeFormatter.ISO_DATE_TIME));
  }

  @Override
  public LocalDateTime deserialize(
      JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext)
      throws JsonParseException {
    if (jsonElement.getAsString() == null || jsonElement.getAsString().isEmpty()) {
      return null;
    } else return LocalDateTime.parse(jsonElement.getAsString(), DateTimeFormatter.ISO_DATE_TIME);
  }
}
