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

import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.wahl.entity.NlWahlPhase;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.presentation.ergebnis.menu.NlWasErgebnisArtefaktNachGebietFreigabeBulkExportMenuItemEntry;

@Named(NlWasFreigabeWahlphaseSchrittMenuItem.COMPONENT_NAME)
public class NlWasFreigabeWahlphaseSchrittMenuItem extends AbstractNlWasWahlphaseSchrittMenuItem {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "nlWasFreigabeWahlphaseSchrittMenuItem";

  @Inject
  private transient NlWasErgebnisArtefaktNachGebietFreigabeBulkExportMenuItemEntry nlWasErgebnisArtefaktNachGebietFreigabeBulkExportMenuItemEntry;

  public NlWasFreigabeWahlphaseSchrittMenuItem() {
    super();
  }

  @Override
  protected NlWahlPhase getZielWahlPhase() {
    return NlWahlPhase.FREIGABE;
  }

  @Override
  protected String getTitleMsgKey(Wahl wahl) {
    if (NlWahlart.EERSTE_KAMER.equalsWahlart(wahl)) {
      return "nl.wahlphase.schritt.freigabe.title.EERSTE_KAMER"; // ELECT-13517
    }

    return super.getTitleMsgKey(wahl);
  }

  @Override
  public String getLabelMsgKey(Wahl wahl) {
    String result = "nl.wahlphase.schritt.freigabe";

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

    return result;
  }

  @Nullable
  @Override
  public String getDialogName() {
    if (!isBefore()) {
      return "freigabe";
    }

    return super.getDialogName();
  }

  @Override
  protected String getDialogHeaderMsgKey(Wahl wahl) {
    String result = "wahl.prozess.freigabe.header";

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

    return result;
  }

  @Override
  protected String getDialogMessageMsgKey(Wahl wahl) {
    String result = "wahl.prozess.freigabe.message";

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

    return result;
  }

  @Override
  protected String getDialogActionLabelMsgKey(Wahl wahl) {
    String result = "wahl.prozess.freigabe.action";

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

    return result;
  }

  @Override
  protected boolean isPhaseDarfAktivWerdenInternal() {
    if (!isBefore()) {
      if (isOffeneLoseVorhanden()) {
        return false;
      }
    }

    // Im CSB gibt es eine Phase mehr...
    if (NlWahlPhase.SITZBERECHNUNG.isAccept(getCustomer(), getSelectedWahl())) {
      return NlWahlPhase.SITZBERECHNUNG.equals(getAktuellePhase());
    }

    return true;
  }

  @Override
  protected String doActionInternalAfterCheck() {
    boolean wasBefore = isBefore();

    String result = super.doActionInternalAfterCheck();

    if (!wasBefore) {
      if (nlWasErgebnisArtefaktNachGebietFreigabeBulkExportMenuItemEntry.isPossible()) {
        return nlWasErgebnisArtefaktNachGebietFreigabeBulkExportMenuItemEntry.getTargetViewId();
      }
    }

    return result;
  }
}
