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

import java.io.Serializable;

import javax.enterprise.event.Observes;
import javax.enterprise.event.Reception;
import javax.inject.Inject;

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

import de.ivu.elect.business.personenregister.entity.PersonenregisterPersonendaten;
import de.ivu.elect.business.wahl.boundary.WahlSelectChangeEvent;
import de.ivu.elect.business.wahl.boundary.WahlterminSelectChangeEvent;


import static java.util.Objects.nonNull;

@GroupedConversationScoped
@ConversationGroup(PersonenregisterPersonendatenConversationStore.class)
public class PersonenregisterPersonendatenConversationStore implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient GroupedConversation conversation;

  private PersonenregisterPersonendaten personenregisterPersonendaten;

  private PersonenregisterByPersonendatenSearchParameters searchParameters;

  public PersonenregisterPersonendatenConversationStore() {
    super();
  }

  public boolean isPersonenregisterPersonendatenSelected() {
    return nonNull(getPersonenregisterPersonendaten());
  }

  public PersonenregisterPersonendaten getPersonenregisterPersonendaten() {
    return personenregisterPersonendaten;
  }

  public void setPersonenregisterPersonendaten(PersonenregisterPersonendaten personenregisterPersonendaten) {
    this.personenregisterPersonendaten = personenregisterPersonendaten;
  }

  public boolean isPersonenregisterByPersonendatenSearchParametersSelected() {
    return nonNull(getPersonenregisterByPersonendatenSearchParameters());
  }

  public PersonenregisterByPersonendatenSearchParameters getPersonenregisterByPersonendatenSearchParameters() {
    return searchParameters;
  }

  public void setPersonenregisterByPersonendatenSearchParameters(PersonenregisterByPersonendatenSearchParameters searchParameters) {
    this.searchParameters = null;

    if (nonNull(searchParameters)) {
      this.searchParameters = new PersonenregisterByPersonendatenSearchParameters(searchParameters.getGeschlechterSupported());
      this.searchParameters.setFamilienname(searchParameters.getFamilienname());
      this.searchParameters.setVorname(searchParameters.getVorname());
      this.searchParameters.setGeburtsdatum(searchParameters.getGeburtsdatum());
      this.searchParameters.setGeschlecht(searchParameters.getGeschlecht());
    }
  }

  public void close() {
    conversation.close();
  }

  public void onWahlSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) WahlSelectChangeEvent event) {
    close();
  }

  public void onWahlterminSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) WahlterminSelectChangeEvent event) {
    close();
  }
}
