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

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

import de.ivu.elect.business.kandidatur.boundary.WaehlerBenannteKandidaturKonfiguration;
import de.ivu.elect.business.kandidatur.boundary.WasWaehlerBenannteKandidaturKonfiguration;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.security.UseCaseSecure;
import de.ivu.elect.business.wahlvorschlag.boundary.ListeExtendedDAO;
import de.ivu.elect.business.wahlvorschlag.boundary.WaehlerBenannterWahlvorschlagBoundaryCreate;
import de.ivu.elect.jee.faces.FacesContextUtil;
import de.ivu.elect.jee.presentation.redirect.Redirect;

@Named(WaehlerBenannteListeCreateMenuItemEntry.COMPONENT_NAME)
public class WaehlerBenannteListeCreateMenuItemEntry extends AbstractListeCreateMenuItemEntry {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "waehlerBenannteListeCreateMenuItemEntry";

  @Inject
  private transient ListeExtendedDAO listeExtendedDAO;

  @Inject
  private transient WaehlerBenannterWahlvorschlagBoundaryCreate waehlerBenannterWahlvorschlagBoundaryCreate;

  @Inject
  private transient WasWaehlerBenannteKandidaturKonfiguration waehlerBenannteKandidaturKonfiguration;

  public WaehlerBenannteListeCreateMenuItemEntry() {
    super();
  }

  @Override
  public boolean isRendered() {
    return super.isRendered() && hasUseCasePermission(UseCasePermission.WAEHLER_BENANNTE_KANDIDATUR_CREATE)
        && waehlerBenannteKandidaturKonfiguration.isWaehlerBenannteListeManuellAnlegenZulaessig(getSelectedGebiet(), listeExtendedDAO::findByGebiet);
  }

  @Override
  protected boolean isAjax() {
    return true;
  }

  @Override
  public String getTargetViewId() {
    return null; // and show dialog!
  }

  @Override
  public String getDialogName() {
    return "WaehlerBenannteListeCreateConfirm";
  }

  @Redirect
  @UseCaseSecure(UseCasePermission.WAEHLER_BENANNTE_KANDIDATUR_CREATE)
  public String doActionConfirmed() {
    waehlerBenannterWahlvorschlagBoundaryCreate.saveWaehlerBenannteListe(getSelectedGebiet());

    addInfoMessage("entity.create.action.save.success.message", getMessage(getEntityEinzahlMessageKey()));

    return FacesContextUtil.getCurrentViewId();
  }

  @Override
  protected String getEntityEinzahlMessageKey() {
    return WaehlerBenannteKandidaturKonfiguration.MSG_KEY_WAEHLER_BENANNTE_LISTE_EINZAHL;
  }
}
