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

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import de.ivu.elect.business.entschaedigung.control.EntschaedigungsartDefaultComparator;
import de.ivu.elect.business.entschaedigung.entity.Entschaedigungsart;
import de.ivu.elect.business.entschaedigung.entity.QEntschaedigungsart;
import de.ivu.elect.jee.entity.QueryDsl;

public class EntschaedigungsartSearch extends AbstractEntschaedigungsartSearch {

  public EntschaedigungsartSearch() {
    super();
  }

  @Override
  protected List<Entschaedigungsart> querySearchResult(EntschaedigungsartSearchParameters searchParameters) {
    List<Entschaedigungsart> result = new ArrayList<>();

    if (!searchParameters.isWahlSelected() && !searchParameters.isWahlterminSelected()) { // ELECT-13302
      return result;
    }

    QEntschaedigungsart entschaedigungsart = QEntschaedigungsart.entschaedigungsart;

    QueryDsl queryDsl = dao.getQueryDsl();
    queryDsl.from(entschaedigungsart);

    if (searchParameters.isWahlSelected()) {
      queryDsl.eq(entschaedigungsart.wahl, searchParameters.getSelectedWahl());
    } else if (searchParameters.isWahlterminSelected()) {
      queryDsl.eq(entschaedigungsart.wahltermin, searchParameters.getSelectedWahltermin());
    }

    if (searchParameters.hasPersonendatenArt()) {
      queryDsl.eqIfNotBlank(entschaedigungsart.kriteriumPersonendatenArt, searchParameters.getPersonendatenArt().getTechnicalName());
    }

    queryDsl.likeIfNotBlank(entschaedigungsart.bezeichnung, searchParameters.getBezeichnung());

    result.addAll(searchParameters.applyLimit(queryDsl).list(entschaedigungsart));
    Collections.sort(result, new EntschaedigungsartDefaultComparator());

    return result;
  }
}
