
package de.ivu.elect.business.wahlvorschlag.entity;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import de.ivu.elect.business.gebietsbaum.entity.EntityMitGebieten;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahlvorschlag.control.WahlvorschlagByRelativePositionAndGruppeSchluesselComparator;

public abstract class AbstractListenverbindung implements ListenverbindungBase, EntityMitGebieten {

  private static final long serialVersionUID = 1L;

  public static final String SPEZIAL_VERBINDUNG_AUSGESCHERT = "AUSGESCHERTE_LISTE";

  public Set<Liste> getListen() {
    return getListesByListenverbindung();
  }

  public List<Liste> getListenSortiertNachPosition() {
    List<Liste> result = new ArrayList<>(getListen());
    Collections.sort(result, new WahlvorschlagByRelativePositionAndGruppeSchluesselComparator());
    return result;
  }

  public Gebiet getErstesGebiet() {
    for (Liste liste : getListen()) {
      return liste.getGebiet();
    }
    throw new IllegalStateException("Keine Listen!");
  }

  @Override
  public Collection<Gebiet> getGebiete() {
    Collection<Gebiet> result = new HashSet<>();
    for (Liste liste : getListen()) {
      result.add(liste.getGebiet());
    }
    return result;
  }

  public boolean isListenverbindungAusgeschert() {
    return SPEZIAL_VERBINDUNG_AUSGESCHERT.equals(getBezeichnung());
  }

  public static Listenverbindung createListenverbindungAusgeschert() {
    Listenverbindung result = new Listenverbindung();
    result.setBezeichnung(SPEZIAL_VERBINDUNG_AUSGESCHERT);
    return result;
  }
}
