
package de.ivu.elect.presentation.stimmeingabe.exchange;

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

import de.ivu.elect.business.ergebnis.entity.Ergebnisart;
import de.ivu.elect.business.stimmeingabe.boundary.ErgebniseingangKonfiguration;
import de.ivu.elect.business.wahl.boundary.WahldurchfuehrungSessionSelect;
import de.ivu.elect.business.wahl.entity.Wahldurchfuehrung;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.ergebnis.ErgebnisStatusInfo;
import de.ivu.elect.presentation.ergebnis.WasErgebnisStatusInfo;

@Specializes
public class WasStimmeingabeDocumentByErgebnisDatenExportView extends StimmeingabeDocumentByErgebnisDatenExportView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahldurchfuehrungSessionSelect wahldurchfuehrungSessionSelect;

  @Inject
  private transient ErgebniseingangKonfiguration ergebniseingangKonfiguration;

  public WasStimmeingabeDocumentByErgebnisDatenExportView() {
    super();
  }

  @Override
  protected void addProperties(FormBuilder formBuilder) {
    super.addProperties(formBuilder);

    formBuilder.addProperty(new WasStimmeingabeDocumentEingabenExcludedProperty(this::setEingabenExcluded, this::isEingabenExcluded));
  }

  @Override
  protected Ergebnisart getSelectedErgebnisart() {
    if (isWahlSelected()) {
      return getSelectedWahl().getErgebniseingangsart().korrespondierendeErgebnisart();
    }

    return super.getSelectedErgebnisart();
  }

  @Override
  public ErgebnisStatusInfo getErgebnisStatusInfo() {
    return new WasErgebnisStatusInfo(getMessages(), getSelectedWahl(), ergebniseingangKonfiguration, getSelectedErgebnisart());
  }

  @Override
  protected boolean isWahlSelected() {
    return wahldurchfuehrungSessionSelect.isSelected();
  }

  @Override
  protected Wahldurchfuehrung getSelectedWahl() {
    return wahldurchfuehrungSessionSelect.getEntity();
  }
}
