
package de.ivu.elect.business.personenpruefung.boundary.dubletten;

import java.io.Serializable;

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.person.entity.Personendaten;
import de.ivu.elect.business.person.entity.PersonendatenPK;
import de.ivu.elect.business.person.entity.VerknuepfungsGrundlage;
import de.ivu.elect.business.person.entity.VerknuepfungsStatus;

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

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient GroupedConversation conversation;

  private DublettenPersonendatenPkPair<PersonendatenPK> personendatenPkPair;

  public DublettenPersonendatenPkPairConversationStore() {
    super();

    this.personendatenPkPair = DublettenPersonendatenPkPair.EMPTY;
  }

  public DublettenPersonendatenPkPair<PersonendatenPK> getPersonendatenPkPair() {
    return personendatenPkPair;
  }

  public void setPersonendatenPair(DublettenPersonendatenPair< ? extends Personendaten> personendatenPair) {
    if (personendatenPair == null || !personendatenPair.hasLeft() || !personendatenPair.hasRight()) {
      resetPersonendatenPair();
    } else {
      personendatenPkPair = new DublettenPersonendatenPkPair<>(personendatenPair.getPersonenVerknuepfungPk(), personendatenPair.getVerknuepfungsGrundlage(), personendatenPair.getVerknuepfungsStatus(),
          personendatenPair.getLeft().getPk(), personendatenPair.getRight().getPk());
    }
  }

  public void resetPersonendatenPair() {
    personendatenPkPair = DublettenPersonendatenPkPair.EMPTY;
  }

  public VerknuepfungsGrundlage getVerknuepfungsGrundlage() {
    return personendatenPkPair.getVerknuepfungsGrundlage();
  }

  public VerknuepfungsStatus getVerknuepfungsStatus() {
    return personendatenPkPair.getVerknuepfungsStatus();
  }

  public boolean hasLeftOrRight() {
    return hasLeft() || hasRight();
  }

  public boolean hasLeftAndRight() {
    return hasLeft() && hasRight();
  }

  public boolean hasLeft() {
    return personendatenPkPair.hasLeft();
  }

  public PersonendatenPK getLeft() {
    return personendatenPkPair.getLeft();
  }

  public boolean hasRight() {
    return personendatenPkPair.hasRight();
  }

  public PersonendatenPK getRight() {
    return personendatenPkPair.getRight();
  }

  public void close() {
    resetPersonendatenPair();

    conversation.close();
  }
}
