package de.ivu.elect.presentation.security.menu;

import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.mandant.control.MandantSupport;
import de.ivu.elect.business.security.control.ElectCommonPrincipal;
import de.ivu.elect.business.wahl.boundary.WahlSessionSelector;
import de.ivu.elect.business.wahl.boundary.WahlterminSessionSelect;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.jee.faces.FacesContextUtil;
import de.ivu.elect.jee.presentation.redirect.Redirect;
import de.ivu.elect.jee.presentation.redirect.RedirectParameterAttachement;
import de.ivu.elect.presentation.security.LoginView;

@Named(LogoutGuiAction.COMPONENT_NANE)
public class LogoutGuiAction {
  public static final String COMPONENT_NANE = "logoutGui";

  @Inject
  protected transient ElectCommonPrincipal principal;

  @Inject
  transient WahlSessionSelector wahlSessionSelect;

  @Inject
  transient WahlterminSessionSelect wahlterminSessionSelect;

  @Inject
  private transient RedirectParameterAttachement redirectParameterAttachement;

  @Inject
  private transient MandantSupport mandantSupport;

  @Redirect
  public String doLogoutGui() {

    // Beim normalen Abmelden soll keine Warnung kommen (vgl. ELECT-695 und ELECT-1182)
    wahlSessionSelect.setEntity((Wahl) null);
    wahlterminSessionSelect.setEntity((Wahltermin) null);

    if (mandantSupport.isMandantenUnterstuetzt()) {
      redirectParameterAttachement.getParameterMap(); // Vor dem Logout mit Mandantenummer füllen
    }

    principal.logoutGUI();

    return LoginView.VIEW_ID;
  }

  public void doLogoutGuiRedirect() {
    doLogoutGui();
    FacesContextUtil.redirectToView(LoginView.VIEW_ID); // redirectToLoginView funbktioniert hier nicht, da die Session schon gekillt wurde...
  }

}
