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

import de.ivu.elect.business.sitzberechnung.control.LessAbstractSitzberechnungsalgorithmus;
import de.ivu.elect.business.sitzberechnung.entity.SitzberechnungsalgorithmusKonfiguration;
import de.ivu.elect.business.sitzberechnung.entity.Sitzberechnungseingabe;
import de.ivu.elect.business.sitzberechnung.entity.Sitzberechnungsergebnis;
import de.ivu.elect.business.wahl.entity.WahlartSitzberechnungsalgorithmus;

/**
 * A.k.a. "relative Mehrheitswahl mit Quorum" (für ein oder mehrere Sitze)...
 *
 * "Vorgesehen ist ein Wahlgang. Jeder Wähler hat eine Stimme. Gewählt ist, wer die meisten Stimmen erhalten hat, sofern diese Mehrheit mindestens XX vom Hundert der wahlberechtigten Personen umfasst
 * (Quorum)."
 *
 * @see https://bravors.brandenburg.de/gesetze/bbgkwahlg#72
 *
 * @see AbsoluteMehrheitswahlSitzberechnungsalgorithmus
 * @see AbsoluteMehrheitswahlMitQuorumSitzberechnungsalgorithmus
 */
public class StandardDirektwahlMitQuorumSitzberechnungsalgorithmus extends LessAbstractSitzberechnungsalgorithmus {

  private static final long serialVersionUID = 1L;

  public StandardDirektwahlMitQuorumSitzberechnungsalgorithmus() {
    super();
  }

  @Override
  public WahlartSitzberechnungsalgorithmus getSitzberechnungsalgorithmusEnum() {
    return WahlartSitzberechnungsalgorithmus.ELECT_DIREKTWAHL_MIT_QUORUM;
  }

  @Override
  public Sitzberechnungsergebnis fuehreSitzberechnungDurch(Sitzberechnungseingabe<SitzberechnungsalgorithmusKonfiguration> sitzberechnungseingabe) {
    return new StandardDirektwahlMitQuorumSitzberechnungsalgorithmusInternal(sitzberechnungseingabe, isVergibtSitze()).berechneSitzverteilung();
  }
}
