package com.bpam.habilitation.actions;

import java.io.IOException;
import java.util.Hashtable;
import java.util.Locale;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.util.MessageResources;
import com.bpam.habilitation.forms.LoginForm;
import com.bpam.habilitation.blbeans.AuthenticationHandler;
import com.bpam.habilitation.views.UserView;
import com.bpam.framework.exception.TechnicalException;
import com.bpam.framework.exception.LoginException;

/**
 * @author Meissa
 *
 * Cette classe est implémente le filtre sur les listes de mails à envoyer ou à reçevoir. 
 *
 */
public final class LoginAction extends Action
{
	public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
		throws IOException, ServletException
	{

		ActionForward forward = null;
		UserView view=null;
		MessageResources messages = getResources();
		ActionErrors errors = new ActionErrors();
		// On invalide la session si elle existe
		HttpSession session = request.getSession(false);
		if (session != null)
		{
			session.invalidate();
		}

		// Creation d'une nouvelle sesion
		session = request.getSession(true);

		// On récupére les valeurs de LoginForm
		String ident = ((LoginForm) form).getIdentifiant();
		String pwd = ((LoginForm) form).getPassword();
		
		AuthenticationHandler authenticator=new AuthenticationHandler();
		try
		{
		view=authenticator.login(ident,pwd);
		}
		catch(LoginException e)
		{
		errors.add("identifiant", new ActionError("error.authentication.failure"));
		saveErrors(request, errors);
	    return (new ActionForward(mapping.getInput()));
		}
		
		catch(TechnicalException e)
		{
		errors.add("identifiant", new ActionError("error.application.unavaillable"));
		saveErrors(request, errors);
	    return (new ActionForward(mapping.getInput()));
		}
		
		

		session.setAttribute( "userView", view );
		forward = mapping.findForward("success");

		return forward;

	}

}
