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

import java.math.BigDecimal;

import de.ivu.elect.business.sitzberechnung.control.dhondt.AbstractDHondtQuotient;
import de.ivu.elect.business.sitzberechnung.control.dhondt.DHondtQuotient;

public class SainteLagueHoechstzahl extends AbstractDHondtQuotient<SainteLagueTeilnehmerErgebnis> {

  private long rang;

  private boolean rangSitzrelevant;

  private boolean rangImLosverfahren;

  SainteLagueHoechstzahl(SainteLagueTeilnehmerErgebnis teilnehmerErgebnis, long teilerIndexZeroBased) {
    super(teilnehmerErgebnis, teilnehmerErgebnis.getTeilnehmer().getStimmen(), 2 * teilerIndexZeroBased + 1);
  }

  public BigDecimal getQuotientenwert() {
    return SainteLagueRundung.toBigDecimal(getFraction());
  }

  long getRang() {
    return rang;
  }

  void setRang(long rang) {
    this.rang = rang;
  }

  boolean isRangSitzrelevant() {
    return rangSitzrelevant;
  }

  void setRangSitzrelevant(boolean rangSitzrelevant) {
    this.rangSitzrelevant = rangSitzrelevant;
  }

  boolean isRangImLosverfahren() {
    return rangImLosverfahren;
  }

  void setRangImLosverfahren(boolean rangImLosverfahren) {
    this.rangImLosverfahren = rangImLosverfahren;
  }

  public DHondtQuotient toDHondtQuotient() {
    boolean isSitzgewinn = isRangSitzrelevant() && (!isRangImLosverfahren() || getTeilnehmerErgebnis().getRestsitzeAusLosverfahren() > 0);

    DHondtQuotient dHondtQuotient = new DHondtQuotient(getTeilnehmerErgebnis(), getZaehler(), getNenner(), isSitzgewinn, isRangImLosverfahren());
    dHondtQuotient.setRang(getRang());

    return dHondtQuotient;
  }
}
