package de.ivu.elect.presentation.wahlvorschlag.action;

import javax.annotation.Nonnull;
import javax.inject.Inject;

import org.apache.deltaspike.core.api.scope.ConversationGroup;

import de.ivu.elect.business.gebietsbaum.boundary.GebietSessionSelect;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.wahlvorschlag.boundary.AbstractListeSearchParameters;
import de.ivu.elect.business.wahlvorschlag.boundary.ListeSearchParameters;
import de.ivu.elect.business.wahlvorschlag.entity.Liste;
import de.ivu.elect.jee.faces.FacesContextUtil;
import de.ivu.elect.presentation.gebietsbaum.tree.AbstractNoStoreGebietsbaumView;
import de.ivu.elect.presentation.security.AbstractGebietSecurity;

public class NlListeInGebietWechselnAction extends AbstractListeAction {
  private static final long serialVersionUID = 1L;

  @Inject
  private transient GebietSessionSelect gebietSessionSelect;

  @Inject
  private transient AbstractNoStoreGebietsbaumView gebietsbaumView;

  @Inject
  @ConversationGroup(AbstractListeSearchParameters.class)
  protected transient ListeSearchParameters searchParameters;

  @Override
  protected UseCasePermission getRequiredPermission() {
    return UseCasePermission.LISTE_SEARCH;
  }

  @Override
  protected AbstractGebietSecurity getGebietSecurity() {
    return AbstractGebietSecurity.KEINE_GEBIET_SECURITY;
  }

  @Override
  protected boolean isDisabledInternal(@Nonnull Liste liste) {
    return super.isDisabledInternal(liste) || liste.getGebiet().equals(gebietSessionSelect.getEntity());
  }

  @Override
  protected String doIt(Liste liste) {
    gebietSessionSelect.setEntity(liste.getGebiet());
    gebietsbaumView.reset();
    searchParameters.setGruppe(liste.getGruppe());
    return FacesContextUtil.getCurrentViewId();
  }

  @Override
  public String getLabelKey() {
    return "nl.liste.action.gebiet.wechseln";
  }

  @Override
  public String getIcon() {
    return "fa fa-arrow-circle-down";
  }
}
