
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.ergebniskonflikt.menu.ErgebnisKonfliktSearchMenuItemEntry;

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

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "nlWasSitzberechnungWahlphaseSchrittMenuItem";

  @Inject
  private transient ErgebnisKonfliktSearchMenuItemEntry ergebnisKonfliktSearchMenuItemEntry;

  public NlWasSitzberechnungWahlphaseSchrittMenuItem() {
    super();
  }

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

  @Override
  public String getLabelMsgKey(Wahl wahl) {
    return "nl.wahlphase.schritt.sitzberechnung";
  }

  @Nullable
  @Override
  public String getDialogName() {
    if (isBefore()) {
      return "sitzberechnung-zurueck";
    }

    return "sitzberechnung";
  }

  @Override
  protected String getDialogHeaderMsgKey(Wahl wahl) {
    if (isBefore()) {
      return "wahl.prozess.sitzberechnung-zurueck.header";
    }

    return "wahl.prozess.sitzberechnung.header";
  }

  @Override
  protected String getDialogMessageMsgKey(Wahl wahl) {
    if (isBefore()) {
      String result = "wahl.prozess.sitzberechnung-zurueck.message";

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

      return result;
    }

    return "wahl.prozess.sitzberechnung.message";
  }

  @Override
  protected String getDialogActionLabelMsgKey(Wahl wahl) {
    if (isBefore()) {
      return "wahl.prozess.sitzberechnung-zurueck.action";
    }

    return "wahl.prozess.sitzberechnung.action";
  }

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

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

    if (!wasBefore) {
      if (isOffeneLoseVorhanden() && ergebnisKonfliktSearchMenuItemEntry.isPossible()) {
        addWarnMessage("nl.sitzberechnung.losentscheide.offen.hinweis");

        return ergebnisKonfliktSearchMenuItemEntry.getTargetViewId();
      }
    }

    return result;
  }
}
