package edu.uprm.admg.nettraveler.ws.admin;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet used for login.
 * 
 * <br>
 * Universidad de Puerto Rico@Mayaguez.
 * <br>
 * <code>NetTraveler</code>
 */
 /*
 * @author Elliot A. Vargas-Figueroa - M.S. Thesis Project.
 * P.I. Manuel Rodriguez-Martinez
 */
 public final class LoginServlet extends HttpServlet implements javax.servlet.Servlet {
    /**
	 * Serial version
	 */
	private static final long serialVersionUID = 839834496454668293L;

	/**
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public LoginServlet() {
		super();
	}   	
	
	/**
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		/* Initialize session */
		HttpSession mySession = request.getSession();
		String redirect = "/admin.jsp";
		if(request.getParameter("logout") != null){
			mySession.removeAttribute("stat");
			redirect = "/index.jsp";
		}else{
			/* Get values from request */
			String name = request.getParameter("username");
			String pass = request.getParameter("password");
			if(name != null && pass != null){
				/* Authenticate */
				Map m = (Map) getServletContext().getAttribute("users");
				String p = (String) m.get(name);
				if(p != null && p.equals(pass)){
					/* Set the stat in the session */
					ServiceStatus stat = 
						(ServiceStatus) getServletContext().getAttribute("stat");
					ServiceConfParams servCon = (ServiceConfParams) getServletContext().getAttribute("conf");
					try {
						/* Set the status of the service */
						boolean run = AdminClient.isRunning(stat.getPort());
						if(run){
							stat.setRunning(true);
							stat.setStatus("Running on port: " + stat.getPort());
						}
					} catch (Exception e) {
						stat.setStatus(e.toString());
					} 
					mySession.setAttribute("stat", stat);	
					mySession.setAttribute("conf",servCon);
					stat = null;
				}
			}
		}
		request.getRequestDispatcher(redirect).forward(request, response);
	}  	
	
	/**
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/* Forward the request to the doGet method */
		doGet(request, response);
	}
}