package de.ivu.elect.business.sitzberechnung.control.wahlbeteiligung;

import java.util.List;

import javax.annotation.Nullable;

public interface WahlberechnungContextDaten {

  boolean isErfassungsgebiet(Wahlbeteiligungsgebiet gebiet); // z.B. Urnenwahlbezirk oder Briefwahlbezirk

  long getAnzahlWahlberechtigteInsgesamt(Wahlbeteiligungsgebiet erfassungsgebiet);

  long getAnzahlWahlberechtigteMitWahlschein(Wahlbeteiligungsgebiet erfassungsgebiet);

  boolean isKopfzahlwerteVollstaendigErfasst(Wahlbeteiligungsgebiet gebiet);

  long getAnzahlWaehlerOhneWahlschein(Wahlbeteiligungsgebiet erfassungsgebiet);

  long getAnzahlWaehlerMitWahlschein(Wahlbeteiligungsgebiet erfassungsgebiet);

  List<Wahlbeteiligungsgebiet> getUntergeordneteGebiete(Wahlbeteiligungsgebiet obergebiet);

  default boolean isUntergebieteVorhanden(Wahlbeteiligungsgebiet gebiet) {
    return !getUntergeordneteGebiete(gebiet).isEmpty();
  }

  @Nullable
  Wahlbeteiligungsgebiet getUebergeordnetesGebiet(Wahlbeteiligungsgebiet gebiet);

  double getRuecklaufquote(Wahlbeteiligungsgebiet gebiet);
}