
package de.ivu.elect.presentation.ergebnis.action;

import javax.annotation.Nonnull;
import javax.inject.Inject;

import de.ivu.elect.business.ergebnis.boundary.Ergebnisberechnung;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.sitzberechnung.control.SitzberechnungsalgorithmusFinder;
import de.ivu.elect.business.sitzberechnung.entity.SitzberechnungsalgorithmusKonfiguration;
import de.ivu.elect.business.wahl.boundary.WahldurchfuehrungSessionSelect;

public abstract class AbstractErgebnisAktualisierenAction extends AbstractErgebnisAction {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient Ergebnisberechnung ergebnisberechnung;

  @Inject
  private transient SitzberechnungsalgorithmusFinder sitzberechnungsalgorithmusFinder;

  @Inject
  private transient WahldurchfuehrungSessionSelect wahldurchfuehrungSessionSelect;

  @Inject
  private transient ErgebnisZurBearbeitungAuswaehlenAction ergebnisZurBearbeitungAuswaehlenAction;

  public AbstractErgebnisAktualisierenAction() {
    super();
  }

  @Override
  protected UseCasePermission getRequiredPermission() {
    return UseCasePermission.ERGEBNIS_BERECHNUNG_AUSLOESEN;
  }

  @Override
  protected boolean isDisabledInternal(@Nonnull Ergebnis ergebnis) {
    return false;
  }

  @Override
  protected boolean isDisabledInternalOnRowDblselect(@Nonnull Ergebnis ergebnis) {
    return true;
  }

  @Override
  protected String doIt(Ergebnis ergebnis) {
//    ergebnisConversationSelect.setEntity(ergebnis);
//    SitzberechnungsalgorithmusKonfiguration sitzberechnungsalgorithmusKonfiguration = sitzberechnungsalgorithmusFinder.getSitzberechnungsalgorithmus(wahldurchfuehrungSessionSelect.getEntity())
//        .getDefaultKonfiguration();
//    aktualisiereKonfiguration(sitzberechnungsalgorithmusKonfiguration);
//    ErgebnisberechnungsErgebnis berechnungsergebnis = ergebnisberechnung.aktualisiereErgebnis(ergebnis, principal.getName(), sitzberechnungsalgorithmusKonfiguration);
//
//    Ergebnis neuesErgegbnis = berechnungsergebnis.getErgebnis();
//
//    if (ergebnisZurBearbeitungAuswaehlenAction.isActionPossible(neuesErgegbnis)) {
//      ergebnisZurBearbeitungAuswaehlenAction.action(neuesErgegbnis);
//    }
//
//    if (berechnungsergebnis.isUngeloesteKonflikteVorhanden()) {
//      messages.addWarnMessage("ergebnis.berechnet.success.message.ungeloeste.konflikte.vorhanden", neuesErgegbnis.getName());
//      return ErgebnisKonfliktSearchView.VIEW_ID;
//    }
//
//    messages.addInfoMessage("ergebnis.berechnet.success.message", neuesErgegbnis.getName());

    // return KandidaturGewaehltSearchView.VIEW_ID;

    throw new UnsupportedOperationException("Überdenken");

  }

  protected abstract void aktualisiereKonfiguration(SitzberechnungsalgorithmusKonfiguration konfiguration);

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

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