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

import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;

import javax.annotation.Nullable;
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.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebietPK;

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

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient GroupedConversation groupedConversation;

  private List<Long> gruppenImGebiet; // ELECTKOM-953 keine Entitäten speichern

  public StimmeingabeListenkandidaturStimmenErfassenViewGruppeImGebietConversationQueue() {
    super();
  }

  public void setGruppenImGebiet(List<GruppeImGebiet> gruppenImGebiet) {
    this.gruppenImGebiet = gruppenImGebiet.stream().map(GruppeImGebiet::getId).collect(Collectors.toList());
  }

  @Nullable
  public GruppeImGebietPK getNachfolgerVon(GruppeImGebiet vorgaenger) {
    if (gruppenImGebiet != null && gruppenImGebiet.contains(vorgaenger.getId())) {
      int vorgaengerIndex = gruppenImGebiet.indexOf(vorgaenger.getId());

      if (vorgaengerIndex + 1 < gruppenImGebiet.size()) {
        return new GruppeImGebietPK(gruppenImGebiet.get(vorgaengerIndex + 1));
      }
    }

    return null;
  }

  public void reset() {
    gruppenImGebiet = null;

    // für Tests
    if (groupedConversation != null) {
      groupedConversation.close();
    }
  }
}
