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

import javax.inject.Inject;

import de.ivu.elect.business.ergebnis.boundary.ErgebnisSessionSelect;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.ergebniskonflikt.boundary.ErgebnisKonfliktExtendedDAO;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;

public abstract class AbstractNlWasWahlphaseSchrittMenuItem extends AbstractNlWahlphaseSchrittMenuItem {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient ErgebnisKonfliktExtendedDAO ergebnisKonfliktExtendedDAO;

  @Inject
  private transient ErgebnisSessionSelect ergebnisSessionSelect;

  protected AbstractNlWasWahlphaseSchrittMenuItem() {
    super();
  }

  protected boolean isOffeneLoseVorhanden() {
    Ergebnis ergebnis = ergebnisSessionSelect.getEntity();

    if (ergebnis == null) {
      return false;
    }

    return ergebnisKonfliktExtendedDAO.findByErgebnisOrderById(ergebnis).stream().anyMatch(ergebnisKonflikt -> !ergebnisKonflikt.isGeloest());
  }

  @Override
  public String getLabelKey() {
    return getLabelMsgKey(getSelectedWahl());
  }

  protected abstract String getLabelMsgKey(Wahl wahl); // ELECT-13517

  public String getDialogHeader() {
    return getMessage(getDialogHeaderMsgKey(getSelectedWahl()));
  }

  protected abstract String getDialogHeaderMsgKey(Wahl wahl); // ELECT-13517

  public String getDialogMessage() {
    return getMessage(getDialogMessageMsgKey(getSelectedWahl()));
  }

  protected abstract String getDialogMessageMsgKey(Wahl wahl); // ELECT-13517

  public String getDialogActionLabel() {
    return getMessage(getDialogActionLabelMsgKey(getSelectedWahl()));
  }

  protected abstract String getDialogActionLabelMsgKey(Wahl wahl); // ELECT-13517

  protected boolean isGsb() {
    return NlWahlart.isWasGSB(getSelectedWahl(), getCustomer());
  }

  protected boolean isNbsb() {
    return NlWahlart.isWasNBSB(getSelectedWahl(), getCustomer());
  }

  protected boolean isNbsbc() {
    return NlWahlart.isWasNBSBC(getSelectedWahl(), getCustomer());
  }

  protected boolean isHsb() {
    return NlWahlart.isWasHSB(getSelectedWahl(), getCustomer());
  }

  protected boolean isHsbc() {
    return NlWahlart.isWasHSBC(getSelectedWahl(), getCustomer());
  }

  protected boolean isCsb() {
    return NlWahlart.isWasCSB(getSelectedWahl(), getCustomer());
  }
}
