
package de.ivu.elect.presentation.stimmeingabe;

import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingabestatus;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.presentation.ergebnis.menu.AbstractNlWasErgebnisArtefaktNachGebietErgebniseingabestatusBulkExportMenuItemEntry;
import de.ivu.elect.presentation.ergebnis.menu.NlWasErgebnisArtefaktNachGebietAbschlussBulkExportMenuItemEntry;
import de.ivu.elect.presentation.ergebnis.menu.NlWasErgebnisArtefaktNachGebietFreigabeBulkExportMenuItemEntry;

@Specializes
public class NlErgebniseingangStatusView extends ErgebniseingangStatusView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient NlWasErgebnisArtefaktNachGebietAbschlussBulkExportMenuItemEntry nlWasErgebnisArtefaktNachGebietAbschlussBulkExportMenuItemEntry;

  @Inject
  private transient NlWasErgebnisArtefaktNachGebietFreigabeBulkExportMenuItemEntry nlWasErgebnisArtefaktNachGebietFreigabeBulkExportMenuItemEntry;

  public NlErgebniseingangStatusView() {
    super();
  }

  @Override
  protected String statusWechselErfolgreich(Ergebniseingabestatus ergebniseingabestatusGesetzt, Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet) {
    // IMMER Aufruf von super, da dadurch bspw. auch Info-Messages hinzugefügt werden!!!
    String outcome = super.statusWechselErfolgreich(ergebniseingabestatusGesetzt, wahldurchfuehrungsgebiet);

    if (isExportMoeglich(nlWasErgebnisArtefaktNachGebietFreigabeBulkExportMenuItemEntry, ergebniseingabestatusGesetzt)) {
      outcome = nlWasErgebnisArtefaktNachGebietFreigabeBulkExportMenuItemEntry.getTargetViewId();
    } else if (isExportMoeglich(nlWasErgebnisArtefaktNachGebietAbschlussBulkExportMenuItemEntry, ergebniseingabestatusGesetzt)) {
      outcome = nlWasErgebnisArtefaktNachGebietAbschlussBulkExportMenuItemEntry.getTargetViewId();
    }

    return outcome;
  }

  private boolean isExportMoeglich(AbstractNlWasErgebnisArtefaktNachGebietErgebniseingabestatusBulkExportMenuItemEntry menuItemEntry, Ergebniseingabestatus ergebniseingabestatusGesetzt) {
    return menuItemEntry.isExportMoeglichOnGebietErgebniseingabestatusChanged(ergebniseingabestatusGesetzt);
  }

  @Override
  public boolean isErfassungschritteRendered() {
    return false; // ELECT-10265 -> NlWahlprozessView
  }

  @Override
  public int getPollTimeoutInSeconds() {
    return POLL_DISABLED; // ELECTVAPP-385
  }

  @Override
  protected String getMsgStatusMsgKey(Ergebniseingabestatus ergebniseingabestatus) {
    String result = super.getMsgStatusMsgKey(ergebniseingabestatus);

    if (NlWahlart.EERSTE_KAMER.equalsWahlart(getSelectedWahldurchfuehrung())) {
      result += ".EERSTE_KAMER"; // ELECT-13517
    }

    return result;
  }
}
