package eu.dnetlib.enabling.ui;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.springframework.beans.factory.annotation.Required;

public class GenericMainServlet extends MainServlet {

	public GenericMainServlet() throws ServletException {
		super();
	}

	/**
	 *
	 */
	private static final long serialVersionUID = 1107492922142943611L;

	/**
	 * URL linked by logo img
	 */
	private String logoHref;
	/**
	 * logo img
	 */
	private String logoImg;

	private String mdHarvFormat;

	private String mdAggrFormat;

	private boolean withTransformatorService;

	private String mainTitle;

	private String googleMapKey;

	@Override
	public Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context context) throws Exception {
		String base = (request.getContextPath().split("\\/"))[1];

		String sessionId = "";
		Cookie[] cookies = request.getCookies();
		if (cookies != null) {
			for (Cookie c : cookies) {
				if (c.getName().equals("session")) {
					sessionId = c.getValue();
				}
			}
		}

		String basedir = "/" + base + "/" + gwtModule;
		context.put("LOGOHREF", logoHref);
		if (logoImg.startsWith("http://")) {
			context.put("LOGOIMG", logoImg);
		} else {
			context.put("LOGOIMG", basedir + "/img/" + logoImg);
		}
		context.put("TITLE", title);
		context.put("MAINTITLE", mainTitle);
		context.put("BASEDIR", basedir);
		context.put("MDAGGRFORMAT", mdAggrFormat);
		context.put("MDHARVFORMAT", mdHarvFormat);
		context.put("WITHTRANSFORMATOR", withTransformatorService);
		context.put("GOOGLEMAPKEY", googleMapKey);

		if ((sessionId == "") || (sessionManager.isValidSession(sessionId) && authManager.authorize(sessionManager.getPrincipal(sessionId)))) {
			context.put("DRIVERAPPCONTEXT", "/" + base);
			context.put("GWTJS", gwtModule + ".nocache.js");
			return getVelocityEngine().getTemplate(template);
		}

		if (sessionManager.isValidSession(sessionId))
			return getVelocityEngine().getTemplate("eu/dnetlib/enabling/ui/velocity/unauthorized.html.vm");
		else
			return getVelocityEngine().getTemplate("eu/dnetlib/enabling/ui/velocity/sessionexpired.html.vm");
	}

	public String getLogoHref() {
		return logoHref;
	}

	@Required
	public void setLogoHref(String logoHref) {
		this.logoHref = logoHref;
	}

	public String getLogoImg() {
		return logoImg;
	}

	@Required
	public void setLogoImg(String logoImg) {
		this.logoImg = logoImg;
	}

	public String getMdHarvFormat() {
		return mdHarvFormat;
	}

	@Required
	public void setMdHarvFormat(String mdHarvFormat) {
		this.mdHarvFormat = mdHarvFormat;
	}

	public String getMdAggrFormat() {
		return mdAggrFormat;
	}

	@Required
	public void setMdAggrFormat(String mdAggrFormat) {
		this.mdAggrFormat = mdAggrFormat;
	}

	public boolean isWithTransformatorService() {
		return withTransformatorService;
	}

	@Required
	public void setWithTransformatorService(boolean withTransformatorService) {
		this.withTransformatorService = withTransformatorService;
	}

	public String getMainTitle() {
		return mainTitle;
	}

	@Required
	public void setMainTitle(String mainTitle) {
		this.mainTitle = mainTitle;
	}

	public void setGoogleMapKey(String googleMapKey) {
		this.googleMapKey = googleMapKey;
	}

	public String getGoogleMapKey() {
		return googleMapKey;
	}

}
