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

import java.io.Serializable;
import java.util.Comparator;

import de.ivu.elect.business.gebietsbaum.control.GebietByBreadthFirstComparator;
import de.ivu.elect.business.wahlvorschlag.entity.Liste;
import de.ivu.elect.business.wahlvorschlag.entity.Listenverbindung;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

public class ListenverbindungNachPositionListenComparator implements Comparator<Listenverbindung>, Serializable {

  private static final long serialVersionUID = 1L;

  private static final Comparator<Wahlvorschlag> LISTE_COMPARATOR = new WahlvorschlagByRelativePositionAndGruppeSchluesselComparator();

  private static final GebietByBreadthFirstComparator GEBIET_COMPARATOR = new GebietByBreadthFirstComparator();

  public ListenverbindungNachPositionListenComparator() {
    super();
  }

  @Override
  public int compare(Listenverbindung o1, Listenverbindung o2) {
    int result = GEBIET_COMPARATOR.compare(o1.getErstesGebiet(), o2.getErstesGebiet());

    if (result != 0) {
      return result;
    }

    Liste listeO1MitKleinsterPosition = bestimmeListeMitKleinsterPosition(o1);
    Liste listeO2MitKleinsterPosition = bestimmeListeMitKleinsterPosition(o2);

    return LISTE_COMPARATOR.compare(listeO1MitKleinsterPosition, listeO2MitKleinsterPosition);
  }

  private Liste bestimmeListeMitKleinsterPosition(Listenverbindung listenverbindung) {
    return listenverbindung.getListenSortiertNachPosition().get(0);
  }
}
