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

import java.io.Serializable;

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

import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfiguration;
import org.apache.deltaspike.core.api.scope.ConversationGroup;
import org.apache.deltaspike.core.api.scope.GroupedConversation;
import org.apache.deltaspike.core.api.scope.GroupedConversationScoped;

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

  private static final long serialVersionUID = 1L;

  @Inject
  private transient GroupedConversation conversation;

  @Inject
  private transient StimmeingabePlausiKonfigurationConversationSelect stimmeingabePlausiKonfigurationConversationSelect;

  private StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration;

  public StimmeingabePlausiKonfigurationTemplateConversationStore() {
    super();
  }

  public void onWahlSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) de.ivu.elect.business.wahl.boundary.WahlSelectChangeEvent event) {
    close();
  }

  public void onWahlterminSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) de.ivu.elect.business.wahl.boundary.WahlterminSelectChangeEvent event) {
    close();
  }

  public boolean isTemplateSelected() {
    return stimmeingabePlausiKonfigurationConversationSelect.isSelected() || stimmeingabePlausiKonfiguration != null;
  }

  public void setTemplate(StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration) {
    if (stimmeingabePlausiKonfiguration == null) {
      this.stimmeingabePlausiKonfiguration = null;
      this.stimmeingabePlausiKonfigurationConversationSelect.clearEntity();
    } else {
      if (stimmeingabePlausiKonfiguration.isPersistent()) {
        this.stimmeingabePlausiKonfigurationConversationSelect.setEntity(stimmeingabePlausiKonfiguration);
      }
      this.stimmeingabePlausiKonfiguration = stimmeingabePlausiKonfiguration;
    }
  }

  public StimmeingabePlausiKonfiguration getTemplate() {
    if (stimmeingabePlausiKonfigurationConversationSelect.isSelected()) {
      StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration = stimmeingabePlausiKonfigurationConversationSelect.getEntity();
      stimmeingabePlausiKonfiguration.setStimmeingabePlausiKonfigurationDefault(this.stimmeingabePlausiKonfiguration.getStimmeingabePlausiKonfigurationDefault());
      return stimmeingabePlausiKonfiguration;
    }

    return stimmeingabePlausiKonfiguration;
  }

  public StimmeingabePlausiKonfiguration getStimmeingabePlausiKonfiguration() {
    return stimmeingabePlausiKonfiguration;
  }

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