
package de.ivu.elect.presentation.wahl;

import javax.inject.Named;

import de.ivu.elect.business.system.entity.SystemGebietsebene;
import de.ivu.elect.business.wahl.boundary.WahlartSearchParameters;
import de.ivu.elect.business.wahl.entity.Wahlart;
import de.ivu.elect.business.wahl.entity.WahlartSystemGebietsebene;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.LambdaEnumProperty;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;
import de.ivu.elect.presentation.security.AbstractGebietSecurityFilter;


import static java.util.Arrays.asList;

/**
 *  on 03.06.2015.
 */
@OnlineHilfeId("464")
@Named(AbstractWahlartSearchView.COMPONENT_NAME)
public class WahlartSearchView extends AbstractWahlartSearchView {

  private static final long serialVersionUID = 1L;

  public WahlartSearchView() {
    super();
  }


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

  @Override
  public void presetSearchParameters() {
    searchParameters.setSystemGebietsebeneAkzeptiert(getSystemGebietsebene());
  }

  @Override
  public WahlartSearchParameters getSearchParameters() {
    WahlartSearchParameters searchParameters = super.getSearchParameters();
    searchParameters.setMandant(getMandant());
    return searchParameters;
  }

  private SystemGebietsebene getSystemGebietsebene() {
    return getMandant().getSystemGebietsebene();
  }

  @Override
  public void addProperties(FormBuilder formBuilder) {
    formBuilder.addProperty(new LambdaEnumProperty<>(getMessage("wahlart.search.wahlart.systemgebietsebene"), false, getSearchParameters()::setWahlartSystemGebietsebene,
        getSearchParameters()::getWahlartSystemGebietsebene, WahlartSystemGebietsebene.class, asList(WahlartSystemGebietsebene.values()), true));

    formBuilder.addProperty(new LambdaEnumProperty<>(getMessage("wahlart.search.akzeptiert.bei.systemgebietsebene"), true, getSearchParameters()::setSystemGebietsebeneAkzeptiert,
        getSearchParameters()::getSystemGebietsebeneAkzeptiert, SystemGebietsebene.class, asList(SystemGebietsebene.values())));
  }

}
