
package de.ivu.elect.business.ergebnis.boundary;

import java.util.List;

import javax.enterprise.event.Observes;
import javax.inject.Inject;

import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.wahl.boundary.WahlSelectChangeEvent;
import de.ivu.elect.business.wahl.entity.Wahl;

public class SetzeEinzigesErgebnisWahlSelectChangeListener {

  @Inject
  private ErgebnisExtendedDAO ergebnisDAO;

  @Inject
  private ErgebnisSessionSelect ergebnisSelect;

  public void onWahlSelectChangeEvent(@Observes WahlSelectChangeEvent event) {
    Wahl wahlSelected = event.getNeueEntity();

    resetErgebnisSelect();

    if (wahlSelected != null) {
      tryPreselectSingleErgebnis(wahlSelected);
    }
  }

  private void tryPreselectSingleErgebnis(Wahl wahl) {
    List<Ergebnis> ergebnisse = findErgebnisse(wahl);

    if (ergebnisse.size() == 1) {
      setErgebnisSelect(ergebnisse.get(0));
    }
  }

  private List<Ergebnis> findErgebnisse(Wahl wahl) {
    return ergebnisDAO.findByWahl(wahl);
  }

  private void resetErgebnisSelect() {
    setErgebnisSelect(null);
  }

  private void setErgebnisSelect(Ergebnis ergebnis) {
    ergebnisSelect.setEntity(ergebnis);
  }
}
