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

import static java.util.Collections.emptyList;

import java.util.List;

import de.ivu.elect.business.konfiguration.control.CustomParameterSearchResult;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlParameter;
import de.ivu.elect.business.wahl.entity.WahlParameterWerte;
import de.ivu.elect.business.wahl.entity.Wahltermin;

public class WahlParameterSearch extends AbstractWahlParameterSearch {

  public WahlParameterSearch() {
    super();
  }

  @Override
  protected List<WahlParameter> querySearchResult(WahlParameterSearchParameters searchParameters) {
    if (searchParameters.isWahlSelected()) {
      return querySearchResult(searchParameters.getSelectedWahl(), searchParameters);
    }

    if (searchParameters.isWahlterminSelected()) {
      return querySearchResult(searchParameters.getSelectedWahltermin(), searchParameters);
    }

    return emptyList();
  }

  private List<WahlParameter> querySearchResult(Wahl wahl, WahlParameterSearchParameters searchParameters) {
    return querySearchResult(dao.findByWahl(wahl), searchParameters);
  }

  private List<WahlParameter> querySearchResult(Wahltermin wahltermin, WahlParameterSearchParameters searchParameters) {
    return querySearchResult(dao.findByWahlterminNotWahl(wahltermin), searchParameters);
  }

  private List<WahlParameter> querySearchResult(List<WahlParameter> wahlParameter, WahlParameterSearchParameters searchParameters) {
    return new CustomParameterSearchResult<WahlParameterWerte, WahlParameter>().getSearchResult(wahlParameter, searchParameters);
  }
}
