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

import java.util.List;

import javax.inject.Inject;

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

@javax.ejb.Stateless
public class ErgebnisImportSearch {

  @Inject
  private ErgebnisDAO ergebnisDAO;

  @Inject
  private WahlDAO wahlDAO;

  public Ergebnis loadUniqueErgebnis(Wahl wahlUnattached, Ergebnisart ergebnisart) {
    List<Ergebnis> findBySearchParameter = getSearchResultByErgebnisartAndWahl(ergebnisart, wahlUnattached);

    if (findBySearchParameter.size() != 1) {
      throw new IllegalStateException(
          "Das Ergebnis ist nicht eindeutig! Es sollte genau 1 Ergebnis geben, es gab aber "
              + findBySearchParameter.size() + "!"
              + String.format(" [ErgebnisArt=%s,Wahl=%s]", ergebnisart, wahlUnattached));
    }
    return findBySearchParameter.get(0);
  }

  private List<Ergebnis> getSearchResultByErgebnisartAndWahl(Ergebnisart ergebnisart, Wahl wahl) {
    return ergebnisDAO.findByWahlAndErgebnisart(wahlDAO.attach(wahl), ergebnisart);
  }

}
