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

import static org.apache.commons.lang3.StringUtils.isNotBlank;

import java.util.List;

import javax.ejb.Stateless;

import de.ivu.elect.business.staat.entity.QStaat;
import de.ivu.elect.business.staat.entity.Staat;
import de.ivu.elect.jee.entity.QueryDsl;
import de.ivu.elect.jee.presentation.dynamicform.BooleanFilterKriterium;

@Stateless
public class StaatSearch extends AbstractStaatSearch {

  public StaatSearch() {
    super();
  }

  @Override
  protected List<Staat> querySearchResult(StaatSearchParameters searchParameters) {
    QueryDsl queryDsl = dao.getQueryDsl();

    QStaat staat = QStaat.staat;

    queryDsl.from(staat);
    queryDsl.likeIfNotBlank(staat.nameStaat, searchParameters.getStaat());
    queryDsl.likeIfNotBlank(staat.nameStaatsangehoerigkeit, searchParameters.getStaatsangehoerigkeit());

    BooleanFilterKriterium euStaaten = searchParameters.getEuStaaten();

    if (euStaaten != null) {
      queryDsl.eqIfNotNull(staat.euStaat, euStaaten.toBoolean());
    }

    String code = searchParameters.getCode();

    if (isNotBlank(code)) {
      String codeLowerCase = code.toLowerCase();

      queryDsl.getQuery().where(staat.customCodeStaat.toLowerCase().like(codeLowerCase).or(staat.customCodeStaatsangehoerigkeit.toLowerCase().like(codeLowerCase))
          .or(staat.iso3166Alpha2.toLowerCase().like(codeLowerCase)).or(staat.iso3166Numerisch.toLowerCase().like(codeLowerCase)));
    }

    queryDsl.getQuery().orderBy(staat.nameStaat.asc());

    return queryDsl.list(staat);
  }
}
