package servlets;

import java.io.IOException;
import java.io.PrintStream;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class ExampleServlet extends HttpServlet {
	
	public void init(ServletConfig config) {
		System.out.println("Example servlet has started up.");
	}	
	
	public void destroy() {
		System.out.println("Example servlet is shutting down.");
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws IOException, ServletException { 
		System.out.println("ExampleServlet got GET request.");
		doPost(request, response);
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws IOException, ServletException {
		System.out.println("ExampleServlet got POST request.");
		
		String userName = request.getParameter("name");
		String password = request.getParameter("password");
		String nextPage = request.getParameter("nextPage");
		String nextServlet = request.getParameter("nextServlet");
		
		PrintStream out = new PrintStream(response.getOutputStream());
	
		if (nextServlet != null) {
			request.getRequestDispatcher("image").forward(request, response);
			return;
		}
		
		if (nextPage == null) {
			out.println("<HTML><HEAD><TITLE>Results</TITLE></HEAD");
			out.println("<BODY>");
			out.println("<H2>Results of Log In</H2");
			
			HttpSession session = request.getSession();
			
			if (password != null && password.equals("password")) {
				out.println("<P>You have successfully logged into the system!</P>");
				session.setAttribute("user", new User(userName));
				out.println("<P>Click <a href=\"example?nextPage=true\">here</a> to get to the next page.</P>");
				out.println("<P>Click <a href=\"example?nextServlet=true\">here</a> to go to the next servlet.</P>");
			} else {
				out.println("<P><font color=red>Your password is not correct!</font></P>");
			}
			out.println("</BODY></HTML>");
		} else {
			out.println("<HTML><HEAD><TITLE>Next page</TITLE></HEAD><BODY>");
			User user = (User)request.getSession().getAttribute("user");
			if (user != null) {
				out.println("<P>I remember who you are " + user.getName() + ".</P>");
			} else {
				out.println("<P>I seem to have forgotten you.</P>");
			}
			out.println("</BODY></HTML>");
		}
	}
	
}

class User implements HttpSessionBindingListener {
	private String userName;
	
	public User(String userName) {
		this.userName = userName;
	}
	
	public String getName() {
		return userName;
	}
	
	public void valueBound(HttpSessionBindingEvent e) {
		System.out.println("A value has been bound to the session: " + userName);
	}
	
	public void valueUnbound(HttpSessionBindingEvent e) {
		System.out.println("Goodbye " + userName);
	}
	
}

