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

import java.util.List;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

public class WahlMandantenAufteilenFilter {

  public WahlAufteilerFilter getFilter(Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet, List<Wahldurchfuehrungsgebiet> wurzelGebiete) {
    return new WahlAufteilerFilter(g -> isGebietAufteilen(g, wahldurchfuehrungsgebiet, wurzelGebiete), this::isWahlvorschlagAufteilen);
  }

  protected boolean isWahlvorschlagAufteilen(Wahlvorschlag w) {
    return true;
  }

  protected boolean isGebietAufteilen(Gebiet g, Wahldurchfuehrungsgebiet wurzelgebiet, List<Wahldurchfuehrungsgebiet> wurzelGebiete) {
    if (wurzelGebiete.size() <= 1) {
      return true;
    }

    if (g.equals(wurzelgebiet)) {
      return true;
    }

    return wurzelGebiete.stream().anyMatch(g::isInGebietshierarchieVon);
  }

}
