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

import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.security.UseCaseSecure;
import de.ivu.elect.business.wahl.control.WahlByWahldatumDescAndPositionAscComparator;
import de.ivu.elect.business.wahl.entity.Wahl;

/**
 * NICHT ALS VORLAGE VERWENDEN(!)
 */
public class WahlSearch extends AbstractWahlSearch {

  private static final Comparator< ? super Wahl> DEFAULT_COMPARATOR = new WahlByWahldatumDescAndPositionAscComparator(); // neueste Wahlen zuerst

  public WahlSearch() {
    super();
  }

  @Override
  @UseCaseSecure(UseCasePermission.WAHL_SEARCH)
  protected List<Wahl> querySearchResult(WahlSearchParameters searchParameters) {
    List<Wahl> result = sucheWahlen(searchParameters);
    result.sort(getSearchResultComparator());
    return result;
  }

  protected List<Wahl> sucheWahlen(WahlSearchParameters searchParameters) {
    List<Wahl> result = dao.findByAll(searchParameters.getMandant());
    // nicht als Pattern verwenden
    if (!searchParameters.getWahlStatus().isEmpty()) {
      result = result.stream().filter(w->searchParameters.getWahlStatus().contains(w.getStatus())).collect(Collectors.toList());
    }

    return result;
  }

  protected Comparator< ? super Wahl> getSearchResultComparator() {
    return DEFAULT_COMPARATOR;
  }
}
