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

import java.io.Serializable;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;

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

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

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient GroupedConversation conversation;

  protected final Queue<PersonendatenPK> personendatenPksZuBearbeiten;

  protected final Set<PersonenVerknuepfungPK> personenVerknuepfungPksBearbeitet;

  public PersonenKonfliktDublettenQueueConversationStore() {
    super();

    this.personendatenPksZuBearbeiten = new LinkedList<>();
    this.personenVerknuepfungPksBearbeitet = new HashSet<>();
  }

  public boolean hasPersonendatenPkZuBearbeiten() {
    return !personendatenPksZuBearbeiten.isEmpty();
  }

  public boolean addPersonendatenPkZuBearbeiten(PersonendatenPK personendatenPk) {
    return personendatenPksZuBearbeiten.add(personendatenPk);
  }

  public PersonendatenPK selectNextPersonendatenPkZuBearbeiten() {
    return personendatenPksZuBearbeiten.poll();
  }

  public PersonendatenPK getPersonendatenPkZuBearbeiten() {
    return personendatenPksZuBearbeiten.peek();
  }

  public boolean isPersonenVerknuepfungPkBearbeitet(PersonenVerknuepfungPK personenVerknuepfungPk) {
    return personenVerknuepfungPksBearbeitet.contains(personenVerknuepfungPk);
  }

  public void addPersonenVerknuepfungPkBearbeitet(PersonenVerknuepfungPK personenVerknuepfungPk) {
    personenVerknuepfungPksBearbeitet.add(personenVerknuepfungPk);
  }

  public void close() {
    personendatenPksZuBearbeiten.clear();
    personenVerknuepfungPksBearbeitet.clear();

    conversation.close();
  }
}
