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

import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.boundary.WahldurchfuehrungsgebietSessionSelect;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.stimmeingabe.control.StimmeingabeErfassenModelBuilderResolver;
import de.ivu.elect.presentation.menu.AbstractMenuItemEntry;
import de.ivu.elect.presentation.replikation.ReplikationPresentationStatus;
import de.ivu.elect.presentation.security.AbstractGebietSecurity;
import de.ivu.elect.presentation.stimmeingabe.FiktiveErgebniseingaengeErzeugenView;
import de.ivu.elect.presentation.stimmeingabe.StimmeingabeSecurity;

public class FiktiveErgebniseingaengeErzeugenMenuItemEntry extends AbstractMenuItemEntry {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahldurchfuehrungsgebietSessionSelect wahldurchfuehrungsgebietSessionSelect;

  @Inject
  private transient StimmeingabeErfassenModelBuilderResolver stimmeingabeErfassenModelBuilderResolver;

  @Inject
  private transient StimmeingabeSecurity stimmeingabeSecurity;

  @Inject
  private transient ReplikationPresentationStatus replikationPresentationStatus;

  public FiktiveErgebniseingaengeErzeugenMenuItemEntry() {
    super();
  }

  @Override
  public boolean isRendered() {
    return stimmeingabeSecurity.isSaveFiktiveWerteErlaubt();
  }

  @Override
  protected AbstractGebietSecurity getGebietSecurity() {
    return getBearbeitenGebietSecurity();
  }

  @Override
  public boolean isDisabledInternal() {
    Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet = wahldurchfuehrungsgebietSessionSelect.getEntity();

    return wahldurchfuehrungsgebiet == null || !stimmeingabeErfassenModelBuilderResolver.isStimmeingabeErfassenModelBuilderAvailable(wahldurchfuehrungsgebiet.getWahl()) || isSlave();
  }

  // WASDE-1153
  private boolean isSlave() {
    return replikationPresentationStatus.isSlave();
  }

  @Override
  public String getTargetViewId() {
    return FiktiveErgebniseingaengeErzeugenView.VIEW_ID;
  }

  @Override
  public String getLabelKey() {
    return "ergebniseingang.fiktive.ergebniseingaenge.erzeugen.menu.item.label";
  }

  @Override
  public String getIcon() {
    return getIcons().getIconCalculate();
  }
}
