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

import java.util.Arrays;
import java.util.function.Consumer;
import java.util.function.Supplier;

import javax.inject.Inject;

import org.apache.deltaspike.core.api.scope.ConversationGroup;
import org.apache.deltaspike.core.api.scope.GroupedConversationScoped;

import de.ivu.elect.business.kandidatenportal.entity.WvpBenutzer;
import de.ivu.elect.business.kandidatenportal.entity.WvpBenutzerStatus;
import de.ivu.elect.jee.presentation.dynamicform.AbstractBooleanFilterKriteriumProperty;
import de.ivu.elect.jee.presentation.dynamicform.BooleanFilterKriterium;
import de.ivu.elect.jee.presentation.dynamicform.LambdaEnumProperty;
import de.ivu.elect.jee.presentation.dynamicform.Property;

/**
 *  on 15.08.2018.
 */
@GroupedConversationScoped
@ConversationGroup(AbstractWvpBenutzerSearchParameters.class)
public class WvpBenutzerSearchParameters extends AbstractWvpBenutzerSearchParameters {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WvpBenutzerFactory wvpBenutzerFactory;

  private WvpBenutzer wvpBenutzer;

  private BooleanFilterKriterium datenImportiert;

  public WvpBenutzerSearchParameters() {
    super();
  }

  public WvpBenutzer getWvpBenutzer() {
    if (wvpBenutzer == null) {
      wvpBenutzer = wvpBenutzerFactory.create();
      wvpBenutzer.setWvpBenutzerStatus(null);
    }
    return wvpBenutzer;
  }

  public void setWvpBenutzer(WvpBenutzer wvpBenutzer) {
    this.wvpBenutzer = wvpBenutzer;
  }

  public BooleanFilterKriterium getDatenImportiert() {
    return datenImportiert;
  }

  public void setDatenImportiert(BooleanFilterKriterium datenImportiert) {
    this.datenImportiert = datenImportiert;
  }

  public Property getWvpBenutzerkennungProperty() {
    return getWvpBenutzer().getProperties().getWvpBenutzerkennungProperty();
  }

  public Property getWvpNamePolitischeGruppeProperty() {
    return getWvpBenutzer().getProperties().getWvpNamePolitischeGruppeProperty();
  }

  public Property getBemerkungProperty() {
    return getWvpBenutzer().getProperties().getBemerkungProperty();
  }

  public Property getFamiliennameProperty() {
    return getWvpBenutzer().getProperties().getFamiliennameProperty();
  }

  public Property getRufnameProperty() {
    return getWvpBenutzer().getProperties().getRufnameProperty();
  }

  public Property getWvpBenutzerStatusProperty() {
    LambdaEnumProperty<WvpBenutzerStatus> defaultWvpBenutzerStatusProperty = getWvpBenutzer().getProperties().getWvpBenutzerStatusProperty();
    return new WvpBenutzerStatusProperty(defaultWvpBenutzerStatusProperty.getDefaultLabel(), wvpBenutzerStatus -> getWvpBenutzer().setWvpBenutzerStatus(wvpBenutzerStatus), () -> getWvpBenutzer().getWvpBenutzerStatus());
  }

  public class WvpBenutzerStatusProperty extends LambdaEnumProperty<WvpBenutzerStatus> {

    public WvpBenutzerStatusProperty(String defaultLabel, Consumer<WvpBenutzerStatus> setter, Supplier<WvpBenutzerStatus> getter) {
      super(defaultLabel, false, setter, getter, WvpBenutzerStatus.class, Arrays.asList(WvpBenutzerStatus.values()), true);
    }
  }

  public Property getDatenImportiertProperty() {
    return new WvpBenutzerDatenImportiertProperty();
  }

  public class WvpBenutzerDatenImportiertProperty extends AbstractBooleanFilterKriteriumProperty {

    @Override
    public String getDefaultLabel() {
      return getMessage("wvpbenutzer.search.daten.importiert.property");
    }

    @Override
    public BooleanFilterKriterium getValue() {
      return getDatenImportiert();
    }

    @Override
    public void setValue(BooleanFilterKriterium booleanFilterKriterium) {
      setDatenImportiert(booleanFilterKriterium);
    }
  }
}
