package org.jboss.resteasy.test.providers.jaxb.resource.parsing;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import javax.xml.datatype.XMLGregorianCalendar;
import java.net.URI;
import java.net.URISyntaxException;
import java.sql.Timestamp;
import java.util.GregorianCalendar;

@Path("/")
public class ParsingStoreResource {
   // this unitName matches the one defined in persistence.xml file
   //@PersistenceContext(unitName="DataCollectionPU")
   //EntityManager em;

   @POST
   @Consumes("application/xml")
   @Path("storeXML/abstract")
   public Response storeXMLAbstract(ParsingAbstractData dataCollectionPackage) {
      return storeXML((ParsingDataCollectionPackage) dataCollectionPackage);
   }

   @POST
   @Consumes("application/xml")
   @Path("storeXML")
   public Response storeXML(ParsingDataCollectionPackage dataCollectionPackage) {
      String sourceID = dataCollectionPackage.getSourceID();
      String eventID = dataCollectionPackage.getEventID();

      if (dataCollectionPackage.getDataRecords() == null ||
            dataCollectionPackage.getDataRecords().getDataCollectionRecord() == null) {
         ResponseBuilder builder = Response.status(Status.INTERNAL_SERVER_ERROR);
         builder.type("text/html");
         builder.entity("<h3>No records included</h3>");
         throw new WebApplicationException(builder.build());
      }

      for (ParsingDataCollectionRecord dr : dataCollectionPackage.getDataRecords().getDataCollectionRecord()) {

         // JAXB datatype for dateTime is XMLGregorianCalendar, need to convert to the java.sql.Timestamp
         XMLGregorianCalendar cal = dr.getTimestamp();
         GregorianCalendar gregorianCalendar = cal.toGregorianCalendar();
         long timeAsMillis = gregorianCalendar.getTimeInMillis();
         Timestamp timestamp = new Timestamp(timeAsMillis);

         // persist data here
      }

      URI createdURI = null;
      try {
         // Create a relative URI
         createdURI = new URI("records");
      } catch (URISyntaxException e) {
         throw new WebApplicationException(Response.serverError().build());
      }
      // For a successful POST send a 201 CREATED with the URI of where to find the records
      // The relative URI will be turned into an absolute URI based on the URI used to access
      // this method.
      //return Response.created(createdURI).build();
      ResponseBuilder builder = Response.created(createdURI);
      builder.type("text/plain");
      // SoapUI considers a 0 length response an error
      builder.entity("storeXML");
      return builder.build();
   }
}
