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

import java.util.Comparator;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppeimgebiet.control.GruppeImGebietCache;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

/**
 * Gebiete, die im Baum näher am Wurzelgebiet sind, werden vor Gebieten eingeordnet, die weiter vom Wurzelgebiet weg
 * sind. Die Wahlvorschläge müssen nicht persistent sein, das Gebiet wird mittels des GruppeImGebietCache über den
 * GebietTK aufgelöst.
 */
public class UnattachedWahlvorschlagByTiefeImGebietsbaumComparator implements Comparator<Wahlvorschlag> {

  private final GruppeImGebietCache gruppeImGebietCache;

  public UnattachedWahlvorschlagByTiefeImGebietsbaumComparator(GruppeImGebietCache gruppeImGebietCache) {
    this.gruppeImGebietCache = gruppeImGebietCache;
  }

  @Override
  public int compare(Wahlvorschlag wahlvorschlag1, Wahlvorschlag wahlvorschlag2) {
    Gebiet gebiet1 = gruppeImGebietCache.getCachedGebiet(wahlvorschlag1.getGebiet().getGebietTK());
    Gebiet gebiet2 = gruppeImGebietCache.getCachedGebiet(wahlvorschlag2.getGebiet().getGebietTK());

    return compareByTiefeImGebietsbaum(gebiet1, gebiet2);
  }

  private int compareByTiefeImGebietsbaum(Gebiet gebiet1, Gebiet gebiet2) {
    return Integer.compare(gebiet1.getAnzahlUebergeordneterGebietsebenen(),
        gebiet2.getAnzahlUebergeordneterGebietsebenen());
  }
}
