package org.apache.jsp;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.SkipPageException;

import org.starhope.appius.mb.MBGoal;
import org.starhope.appius.mb.MBSession;
import org.starhope.appius.mb.Messages;
import org.starhope.appius.user.AbstractUser;
import org.starhope.appius.user.Nomenclator;
import org.starhope.appius.user.Parent;
import org.starhope.appius.user.User;

import com.tootsville.WebUtil;

public final class login_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

  private static java.util.List _jspx_dependants;

  @Override
public void _jspService(final HttpServletRequest request, final HttpServletResponse response)
        throws java.io.IOException, ServletException {

    JspFactory _jspxFactory = null;
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;


    try {
      _jspxFactory = JspFactory.getDefaultFactory();
      response.setContentType("text/html; charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;


//----------  Universal Declarations: Place this on every page.
/**
 *   Error message list
*/
HashMap <String, String> err = new HashMap <String, String> ();
/**
 *   Success message list
*/
HashMap <String, String> suc = new HashMap <String, String> ();
MBSession sess =MBSession.get (request);


String login = request.getParameter("login").toString();
if (null!=login && login.equalsIgnoreCase("user")) {
	String username = request.getParameter("uUsername");
	String password = request.getParameter("uPassword");
	System.err.println ("A user is logging in: " + username);
	boolean remember = null!=request.getParameter("uRemember");
	if (null!=username && null!=password && !username.equals("") && !password.equals("")) {
		AbstractUser findUser = Nomenclator.getUserByLogin (username);
		if (null!=findUser && findUser instanceof User) {
			final User sessionUser=(User)findUser;
			if (sessionUser.checkPassword(password)) {
				if (remember) {
					Cookie cookie = new Cookie ("username", username);
					cookie.setMaxAge(365 * 24 * 60 * 60);
					response.addCookie(cookie);
				}
				// Create session for user
				sess.setVisitorAsUser (sessionUser);
//				session.setAttribute("sUserID", sessionUser.getUserID());
//				session.setAttribute("sUserType", WebUtil.USER);
//				session.setAttribute("sUserPassword", sessionUser.getPassword());
				if (null==sessionUser.getResponsibleMail()) {
					// Redirect to collect email address
					System.out.println(sessionUser.getUserName() + " is not registered with an email, directing to prompt.");
					sess.add (MBGoal.SET_RESPONSIBLE_MAIL);
					response.sendRedirect("/membership/register/email/");
				} else {
					// Redirect user to account page
					System.out.println(sessionUser.getUserName() + " is registered with this email: " + sessionUser.getResponsibleMail());
					response.sendRedirect("/membership/my-account/");
				}
			} else {
				session.
				err.put("password", Messages.password_invalid());
			}
		} else {
			err.put("username", Messages.user_does_not_exist());
			System.err.println("Something is going wrong?  A parent object wasn't created when the parent tried to log in.");
		}
	} else {
		if (null==username || username.equals("")) {
			err.put("username", Messages.blank_field("username"));
		}
		if (null==password || password.equals("")) {
			err.put("password", Messages.blank_field("password"));
		}
	}

} else if (login.equalsIgnoreCase("parent")) {
	String username = request.getParameter("pUsername");
	String password = request.getParameter("pPassword");
	boolean remember = null!=request.getParameter("pRemember");
	if (null!=username && null!=password && !username.equals("") && !password.equals("")) {
		Parent sessionUser = Parent.getByMail(username);
		if (null!=sessionUser) {
			System.err.println("A parent, " + sessionUser.getDisplayName() + " is logging in.");
			if (sessionUser.checkPassword(password)) {
				if (remember) {
					Cookie cookie = new Cookie ("username",username);
					cookie.setMaxAge(365 * 24 * 60 * 60);
					response.addCookie(cookie);
				}
				if (null!=sessionUser.getMailConfirmed()) {
					// Create session for user
					session.setAttribute("sUserID", sessionUser.getID());
					session.setAttribute("sUserType", WebUtil.PARENT);
					session.setAttribute("sUserPassword", sessionUser.getPassword());
					// Redirect user to account page
					response.sendRedirect("/membership/parent/");
				} else {
					err.put("username", "Please confirm your e-mail address.");
					System.err.println (sessionUser.getDisplayName() + " needs to confirm their e-mail.");
					session.setAttribute("sError", err);
				}

			} else {
				err.put("password", Messages.password_invalid());
			}
		} else {
			err.put("username", Messages.user_does_not_exist());
		}

	} else {
		if (null==username || username.equals("")) {
			err.put("username", Messages.blank_field("username"));
		}
		if (null==password || password.equals("")) {
			err.put("password", Messages.blank_field("password"));
		}
	}
} else if (login.equalsIgnoreCase("billing")) {
	String username = request.getParameter("username");
	String password = request.getParameter("password");
	boolean remember = null!=request.getParameter("uRemember");
	if (0<=username.indexOf('@')) {
		Parent sessionUser = Parent.getByMail(username);
		if (null!=sessionUser) {
			if (sessionUser.checkPassword(password)) {
				if (remember) {
					Cookie cookie = new Cookie ("username",username);
					cookie.setMaxAge(365 * 24 * 60 * 60);
					response.addCookie(cookie);
				}
				// Create session for user
				session.setAttribute("sUserID", sessionUser.getID());
				session.setAttribute("sUserType", WebUtil.PARENT);
				session.setAttribute("sUserPassword", sessionUser.getPassword());
				// Create message with instructions
				suc.put ("", Messages.select_toot_upgrade());
				session.setAttribute("sSuccess", suc);
				// Redirect user to account page
				response.sendRedirect("/membership/parent/");
			} else {
				err.put("password", Messages.password_invalid());
			}
		} else {
			err.put("username", Messages.user_does_not_exist());
		}
	} else {
		if (null!=username && null!=password && !username.equals("") && !password.equals("")) {
			User sessionUser = User.getByLogin(username);
			if (null!=sessionUser) {
				if (sessionUser.checkPassword(password)) {
					if (remember) {
						Cookie cookie = new Cookie ("username",username);
						cookie.setMaxAge(365 * 24 * 60 * 60);
						response.addCookie(cookie);
					}
					// Create session for user
					session.setAttribute("sUserID", (sessionUser).getUserID());
					session.setAttribute("sUserType", WebUtil.USER);
					session.setAttribute("sUserPassword", sessionUser.getPassword());
					if (null==sessionUser.getResponsibleMail()) {
						// Redirect to collect email address
						System.out.println(sessionUser.getUserName() + " is not registered with an email, directing to prompt.");
						response.sendRedirect("/membership/register/email/");
					} else {
						// Redirect user to account page
						System.out.println(sessionUser.getUserName() + " is registered with this email: " + sessionUser.getResponsibleMail());
						response.sendRedirect("/membership/register/premium/?toot=" + sessionUser.getUserID());
					}
				} else {
					err.put("password", Messages.password_invalid());
				}
			} else {
				err.put("username", Messages.user_does_not_exist());
			}

		} else {
			if (null==username || username.equals("")) {
				err.put("username", Messages.blank_field("username"));
			}
			if (null==password || password.equals("")) {
				err.put("password", Messages.blank_field("password"));
			}
		}
	}
	if (err.size() > 0) {
		/** If there was any errors caught, return to last page with the error message. */
		session.setAttribute("sError", err);
		response.sendRedirect("/register/premium/billing.jsp");
	}

} else {
	err.put("username", Messages.login_invalid());
	System.err.println ("--Error-- " );
	Map params = request.getParameterMap();
	for ( Object key : params.keySet() ) {
		System.err.println (" " + key.toString () + " = " + params.get(key).toString () );
	}
	System.err.println (request.getParameter("login").toString());
}


if (err.size() > 0) {
	/** If there was any errors caught, return to last page with the error message. */
	session.setAttribute("sError", err);
	response.sendRedirect("/membership/");
}


      out.write('\n');
    } catch (Throwable t) {
      if (!(t instanceof SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0) {
			out.clearBuffer();
		}
        if (_jspx_page_context != null) {
			_jspx_page_context.handlePageException(t);
		}
      }
    } finally {
      if (_jspxFactory != null) {
		_jspxFactory.releasePageContext(_jspx_page_context);
	}
    }
  }

  public Object getDependants() {
    return login_jsp._jspx_dependants;
  }
}
