package com.k_int.ciim.ui.analytics;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import javax.annotation.security.RolesAllowed;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
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 com.k_int.ciim.core.ugc.AnalyticsProcessor;
import com.k_int.ciim.core.ugc.UgcManager;
import com.sun.jersey.api.view.ImplicitProduces;


@XmlRootElement
@ImplicitProduces("application/xml;qs=5") //for FireFox?
@XmlAccessorType(XmlAccessType.FIELD)
@Path("/analytics/popularity")
public class PopularityHandler 
{
	@XmlTransient
	private static Log log = LogFactory.getLog(PopularityHandler.class);	
	@XmlTransient
	private UgcManager mgmt_service = null;
	
	@XmlTransient
	AnalyticsProcessor processor = null;
	
	public void setUgcManager(UgcManager mgmt_service) { this.mgmt_service = mgmt_service; }
	
	public void setProcessor(AnalyticsProcessor processor) { this.processor = processor; }
	
	public PopularityHandler(){;}
	
	@GET
    @Produces(MediaType.APPLICATION_XML)
    @RolesAllowed({"GLOBAL.admin", "Super"})
    public Response tag(@Context SecurityContext sc) 
	{
		log.debug("Ui popularity handler called");
		StringBuilder resp_builder = new StringBuilder();
		resp_builder.append("<response>");
		log.debug("Context "+sc);
		if(sc.isUserInRole("GLOBAL.admin") || sc.isUserInRole("Super"))
		{
				try
				{
					Calendar cal = new GregorianCalendar();
					Date now = new Date();
					cal.setTime(now);
					cal.add(Calendar.MONTH, -1);
					Date from = cal.getTime();
					cal.setTime(now);
					cal.add(Calendar.DAY_OF_YEAR, -2);		
					mgmt_service.processAnalytics(from, cal.getTime(), processor);
					resp_builder.append("<success>");
					resp_builder.append("Queued popularity analytics for processing");
					resp_builder.append("</success>");
				}
				catch(Exception e)
				{
					resp_builder.append("<error>");
					resp_builder.append("Exception processing popularity analytics: "+e.getMessage());
					resp_builder.append("</error>");
				}
				
		}
		else
		{
			resp_builder.append("<error>");
			resp_builder.append("Authentication failure");
			resp_builder.append("</error>");
		}
		resp_builder.append("</response>");
        return Response.ok(resp_builder.toString()).build();
	}

}
