package com.k_int.ciim;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import com.k_int.ciim.json.CIIMMediaFormatJSON;
import com.k_int.ciim.kernel.CIIMDataManager;
import com.sun.jersey.api.view.ImplicitProduces;

/**
 * REST Web Service
 *
 * @author Mark Johnson
 * curl -s -H 'Accept: application/json' http://localhost:8080/Template/CIIM/Media/Formats
 * ImplicitProduces("text/html;qs=5")   
 */

@XmlRootElement
@ImplicitProduces("application/json;qs=5")
@XmlAccessorType(XmlAccessType.FIELD)
@Path("/CIIM/Media/Formats")
@Component
public class MediaFormats implements ApplicationContextAware 
{
	 @XmlTransient
	 private ApplicationContext ctx;
	 
	 @XmlTransient
	 @Context HttpServletRequest request;
	 
	 @XmlTransient
	 private static Log log = LogFactory.getLog(MediaFormats.class);

	 public void setApplicationContext(ApplicationContext ctx) 
	 {
	    this.ctx = ctx;
	 }
	   
	 @javax.annotation.PreDestroy
	 public void destroy() 
	 {
	 }
	   
	 /** Creates a new instance */
	 public MediaFormats() 
	 {
		 //log.debug("*** new Objects class contructor");
	 }

	 @javax.annotation.PostConstruct
	 public void init() 
	 {
		 //log.debug("*** new Objects class init");
	 }	 
	 
	 @Path("/")
	 @GET
	 @Produces({MediaType.APPLICATION_JSON})
	 public List<CIIMMediaFormatJSON> getJSON()
	 {
		 CIIMDataManager cdm = (CIIMDataManager) ctx.getBean("CIIMDataManager");
		 
		 return cdm.getImgResizeFormats();
	 }
	 
	 @Path("/Create")
	 @POST
	 @Produces({MediaType.TEXT_PLAIN})
	 public String createMediaFormat(	@FormParam("name") String name,
			  							@FormParam("base_height") Long base_height,
										@FormParam("base_width") Long base_width, 
										@FormParam("resize_dimension") String resize_dimension, 
										@FormParam("small_size") Long small_size, 
										@FormParam("medium_size") Long medium_size,
										@FormParam("large_size") Long large_size)
	 {
		 String retval = null;
		 
		 if(name == null || name.trim().length() == 0)
		 {
			 retval = "Format creation failed. Format Identifier is mandatory.";
		 }
		 else
		 {
			 CIIMDataManager cdm = (CIIMDataManager) ctx.getBean("CIIMDataManager");
		 
			 if(cdm.createImgResizeFormat(name, base_height, base_width, resize_dimension, small_size, medium_size, large_size, request))
			 {			 
				 retval = "Format successfully created."; 
			 }
			 else
			 {
				 retval = "Format creation failed.";
			 }
		 }
		 
		 return retval;
	 }
	 
	 @Path("/Delete")
	 @POST
	 @Produces({MediaType.TEXT_PLAIN})
	 public String createMediaFormat(@QueryParam("name") String name)
	 {
		 String retval = "Unable to delete format.";
		 
		 CIIMDataManager cdm = (CIIMDataManager) ctx.getBean("CIIMDataManager");
		 
		 if(cdm.deleteImgResizeFormat(name, request))
		 {
			 retval = "Format successfully deleted."; 
		 }
		 
		 return retval;		 
	 }
	 
	 @Path("/Valid")
	 @POST
	 @Produces({MediaType.APPLICATION_JSON})
	 public List<CIIMMediaFormatJSON> getApplicableFormats(@QueryParam("attachment_id") Long attachment_id)
	 {
		 CIIMDataManager cdm = (CIIMDataManager) ctx.getBean("CIIMDataManager");
		 
		 return cdm.getApplicableImgResizeFormats(attachment_id); 		 
	 } 
}
