package com.kamco.cd.training.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.kamco.cd.training.common.utils.geometry.GeometryDeserializer;
import com.kamco.cd.training.common.utils.geometry.GeometrySerializer;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

  @Bean
  public ObjectMapper objectMapper() {
    SimpleModule module = new SimpleModule();
    module.addSerializer(Geometry.class, new GeometrySerializer<>(Geometry.class));
    module.addDeserializer(Geometry.class, new GeometryDeserializer<>(Geometry.class));

    module.addSerializer(Polygon.class, new GeometrySerializer<>(Polygon.class));
    module.addDeserializer(Polygon.class, new GeometryDeserializer<>(Polygon.class));

    module.addSerializer(Point.class, new GeometrySerializer<>(Point.class));
    module.addDeserializer(Point.class, new GeometryDeserializer<>(Point.class));

    return Jackson2ObjectMapperBuilder.json().modulesToInstall(module).build();
  }
}
