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

import java.util.List;

import de.ivu.elect.business.aufgabe.entity.Aufgabe;
import de.ivu.elect.business.aufgabe.entity.QAufgabe;

public class AufgabeSearch extends AbstractAufgabeSearch {

  @Override
  protected List<Aufgabe> querySearchResult(AufgabeSearchParameters searchParameters) {

    var qdsl = dao.getQueryDsl();
    var aufgabe = QAufgabe.aufgabe;
    qdsl.from(aufgabe);

    qdsl.eq(aufgabe.wahltermin, searchParameters.getAufgabe().getWahltermin());
    qdsl.eqIfNotNull(aufgabe.wahl, searchParameters.getAufgabe().getWahl());

    qdsl.eqIfNotNull(aufgabe.nummer, searchParameters.getAufgabe().getNummer());
    qdsl.likeIfNotBlank(aufgabe.titel, searchParameters.getAufgabe().getTitel());
    qdsl.likeIfNotBlank(aufgabe.kategorie, searchParameters.getAufgabe().getKategorie());
    qdsl.likeIfNotBlank(aufgabe.rechtsgrundlage, searchParameters.getAufgabe().getRechtsgrundlage());
    qdsl.likeIfNotBlank(aufgabe.verantwortlich, searchParameters.getAufgabe().getVerantwortlich());
    qdsl.inIfNotEmpty(aufgabe.aufgabentyp, searchParameters.getAufgabentypen());
    qdsl.inIfNotEmpty(aufgabe.prioritaet, searchParameters.getAufgabenPrioritaeten());
    qdsl.inIfNotEmpty(aufgabe.status, searchParameters.getAufgabenStatus());

    qdsl.orderBy(aufgabe.nummer.asc());

    return qdsl.list(aufgabe);
  }
}
