package com.bttlindia.oms.http;

import java.util.Random;

import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



public class HttpProxyServlet extends HttpServlet {
	//private RequestProcessor processor = null;
	private boolean connected = false;
	private int count = 1;
    private Random random = new Random();

	

	public void init(ServletConfig conf) throws ServletException{
	  super.init(conf);
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
											 throws ServletException, IOException {

		String actionType = request.getParameter("ActionType");
		System.out.println("Received request, actionType = " + actionType);

		if (actionType == null || actionType.length() < 1){
			write(response, "Action Type is not set. You must call the servlet " +
								   "with some action type");
			return;
		}

		//check if the user is already logged-in.
		if(actionType.equals("login")){
			doLogin(request, response);

		if(actionType.equals("logout")){
			doLogout(response);
		}
		if(actionType.equals("browserReady")){
			//emulate the callback here
			update(response);
		}


	}

	private void validate(String userName, String password, String invalidate)
															throws Exception{
		if (userName == null || userName.length() < 1){
			throw new Exception("Null or empty user name. ");
		}

		if (password == null || userName.length() < 1){
			throw new Exception("Null or empty password. ");
		}
		if (invalidate == null || userName.length() < 1){
			throw new Exception("Null or empty session invalidate directive. ");
		}


	}

	private void write(HttpServletResponse response, String message){
		response.setContentType("text/html");
		try{
			PrintWriter writer = response.getWriter();
			writer.println(message);
			writer.flush();
			writer.close();
		}catch(IOException ie){
			System.out.println("Error: unable to write response");
		}
	}
	private void doLogin(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = null;	  

		if(connected){
			write(response, "User is already logged in. You must logout for " +
				  "logging in as another user ");
			return;
		}else{
			//get Login Parameters
			String userName = request.getParameter("xmlBlaster.loginName");
			String password = request.getParameter("xmlBlaster.password");
			String invalidate = request.getParameter("xmlBlaster.invalidate");

			//validate the login parameters
			try{
				validate(userName, password, invalidate);
			}catch(Exception e){
				write(response, "Invalid login Parameter" + e.getMessage());
				return;
			}

			//Crearte a new session for the user
			session = request.getSession(true);
			if(invalidate.equals("true")){
				session.invalidate();
				session = request.getSession(true);
			}

			//create a connection with the backend system 
			//for now just emulate the login successful
			if(userName.equals("raj") && password.equals("secret")){
				//login is successfull
				connected = true;
				write(response, "Login successfull");
			}else{
				write(response, "Login Failed");
			}
		}
	}

	private void doLogout(HttpServletResponse response){
		write(response, "Disconnected from server");
		connected = false;
	}
	private void update(HttpServletResponse response){
		System.out.println("Sending reply to browserReady message");
		write(response, new Integer(random.nextInt(100)).toString());
	}
}
