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

import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;

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

import de.ivu.elect.business.fremdkandidatur.entity.Fremdkandidatur;
import de.ivu.elect.business.fremdkandidatur.entity.FremdkandidaturProperties;
import de.ivu.elect.business.person.boundary.SearchParametersMitPersonendatenNamen;
import de.ivu.elect.business.person.entity.PersonStatus;
import de.ivu.elect.jee.entity.customdata.EmptyCustomData;
import de.ivu.elect.jee.presentation.dynamicform.Property;

@GroupedConversationScoped
@ConversationGroup(AbstractFremdkandidaturSearchParameters.class)
public class FremdkandidaturSearchParameters extends AbstractFremdkandidaturSearchParameters implements SearchParametersMitPersonendatenNamen {

  private static final long serialVersionUID = 1L;

  private Fremdkandidatur fremdkandidatur;

  public FremdkandidaturSearchParameters() {
    super();
  }

  @Override
  public Property getFamiliennameProperty() {
    Property property = getFremdkandidaturProperties().getFamiliennameProperty();
    property.setRequired(false);

    return property;
  }

  @Override
  public String getFamilienname() {
    return getFremdkandidatur().getFamilienname();
  }

  @Override
  public void setFamilienname(String familienname) {
    getFremdkandidatur().setFamilienname(familienname);
  }

  @Override
  public Property getVornameProperty() {
    Property property = getFremdkandidaturProperties().getRufnameProperty();
    property.setRequired(false);
    property.setLabel(getMessage(SearchParametersMitPersonendatenNamen.MESSAGE_KEY_VORNAME_EINZAHL));

    return property;
  }

  @Override
  public String getVorname() {
    return getFremdkandidatur().getRufname();
  }

  @Override
  public void setVorname(String vorname) {
    getFremdkandidatur().setRufname(vorname);
  }

  public Property getPersonStatusProperty() {
    return getFremdkandidaturProperties().getPersonStatusMitLeererAuswahlProperty();
  }

  public boolean hasPersonStatus() {
    return nonNull(getPersonStatus());
  }

  public PersonStatus getPersonStatus() {
    return getFremdkandidatur().getPersonStatus();
  }

  public void setPersonStatus(PersonStatus personStatus) {
    getFremdkandidatur().setPersonStatus(personStatus);
  }

  private FremdkandidaturProperties getFremdkandidaturProperties() {
    return getFremdkandidatur().getProperties();
  }

  private Fremdkandidatur getFremdkandidatur() {
    if (isNull(fremdkandidatur)) {
      fremdkandidatur = new Fremdkandidatur(EmptyCustomData.INSTANCE);
      fremdkandidatur.setPersonStatus(null);
    }

    return fremdkandidatur;
  }

  @Override
  public void reset() {
    fremdkandidatur = null;

    super.reset();
  }
}
