
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" (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."
 *
 * @see https://www.wahlrecht.de/systeme/mehrheitswahl.htm
 * @see https://de.wikipedia.org/wiki/Mehrheitswahl#Relative_Mehrheitswahl...
 *
 * @see AbsoluteMehrheitswahlSitzberechnungsalgorithmus
 * @see AbsoluteMehrheitswahlMitQuorumSitzberechnungsalgorithmus
 */
public class StandardDirektwahlSitzberechnungsalgorithmus extends LessAbstractSitzberechnungsalgorithmus {

  private static final long serialVersionUID = 1L;

  public static final String ID = "de.ivu.elect.business.sitzberechnung.control.direktwahl.StandardDirektwahlSitzberechnungsalgorithmus";

  public StandardDirektwahlSitzberechnungsalgorithmus() {
    super();
  }

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

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