
package de.ivu.elect.presentation.entschaedigung;

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

import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.entschaedigung.boundary.EntschaedigungCalculator;
import de.ivu.elect.business.entschaedigung.entity.Entschaedigungsart;
import de.ivu.elect.business.person.entity.PersonendatenArt;
import de.ivu.elect.jee.entity.EagerLoadingCollector;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.search.AbstractSearchParameters;
import de.ivu.elect.presentation.entschaedigung.table.EntschaedigungsartColumnBuilder;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;
import de.ivu.elect.presentation.security.AbstractGebietSecurityFilter;

@OnlineHilfeId("587")
@Named(EntschaedigungsartSearchView.COMPONENT_NAME)
public class EntschaedigungsartSearchView extends AbstractEntschaedigungsartSearchView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient EntschaedigungCalculator entschaedigungCalculator;

  @Inject
  private transient EntschaedigungsartColumnBuilder entschaedigungsartColumnBuilder;

  public EntschaedigungsartSearchView() {
    super();
  }

  @Override
  public int getDefaultPageSize() {
    return getPageSizeShowAll();
  }

  @Override
  protected AbstractGebietSecurityFilter<Entschaedigungsart> getGebietSecurityFilter() {
    return KEIN_GEBIET_SECURITY_FILTER;
  }

  @Override
  public void presetSearchParameters() {
    resetSearchParametersModel();
  }

  @Override
  public void addProperties(FormBuilder formBuilder) {
    String wildcardTooltip = getMessage(AbstractSearchParameters.WILDCARD_TOOLTIP_MSG_KEY);

    List<PersonendatenArt> personendatenArten = getSupportedPersonendatenArten();

    if (personendatenArten.size() == 1) {
      searchParameters.setPersonendatenArt(personendatenArten.get(0));
    } else {
      formBuilder.addProperty(searchParameters.getPersonendatenArtProperty(personendatenArten));
    }

    formBuilder.addProperty(searchParameters.getBezeichnungProperty()).withTooltip(wildcardTooltip);
  }

  private List<PersonendatenArt> getSupportedPersonendatenArten() {
    return new ArrayList<>(entschaedigungCalculator.getSupportedPersonendatenArten());
  }

  @Override
  public EagerLoadingCollector<Entschaedigungsart> getEagerLoadingCollector() {
    EagerLoadingCollector<Entschaedigungsart> eagerLoadingCollector = EagerLoadingCollector.<Entschaedigungsart> create();

    entschaedigungsartColumnBuilder.collectEagerLoadings(eagerLoadingCollector);

    return eagerLoadingCollector;
  }
}
