
package de.ivu.elect.sitzberechnung.verteilung.saintelague;

import static java.util.Collections.emptyList;

import java.util.ArrayList;
import java.util.List;

import de.ivu.elect.sitzberechnung.math.Fraction;
import de.ivu.elect.sitzberechnung.verteilung.Teilnehmer;
import de.ivu.elect.sitzberechnung.verteilung.VerteilungContext;

public class SainteLagueDivisorErgebnis extends AbstractSainteLagueErgebnis<SainteLagueDivisorTeilnehmerErgebnis> {

  private final Fraction zuteilungsdivisor;

  public SainteLagueDivisorErgebnis(VerteilungContext context, Fraction zuteilungsdivisor, List<SainteLagueDivisorTeilnehmerErgebnis> teilnehmerErgebnisse) {
    this(context, zuteilungsdivisor, teilnehmerErgebnisse, 0L, emptyList());
  }

  public SainteLagueDivisorErgebnis(VerteilungContext context, Fraction zuteilungsdivisor, List<SainteLagueDivisorTeilnehmerErgebnis> teilnehmerErgebnisse, long anzahlSitzeZuVerlosen,
      List<SainteLagueDivisorTeilnehmerErgebnis> teilnehmerErgebnisseImLosverfahren) {
    super(context, teilnehmerErgebnisse, anzahlSitzeZuVerlosen, teilnehmerErgebnisseImLosverfahren);

    this.zuteilungsdivisor = zuteilungsdivisor;
  }

  public Fraction getZuteilungsdivisor() {
    return zuteilungsdivisor;
  }

  /**
   * @return Ergebnis der Verteilung, wenn keine richtige Verteilung stattgefunden hat
   */
  public static SainteLagueDivisorErgebnis ohneVerteilung(VerteilungContext context, Fraction zuteilungsdivisor, List< ? extends Teilnehmer> teilnehmerInVerteilung) {
    List<SainteLagueDivisorTeilnehmerErgebnis> teilnehmerErgebnisse = new ArrayList<>();

    for (Teilnehmer teilnehmer : teilnehmerInVerteilung) {
      teilnehmerErgebnisse.add(SainteLagueDivisorTeilnehmerErgebnis.ohneVerteilung(teilnehmer));
    }

    return new SainteLagueDivisorErgebnis(context, zuteilungsdivisor, teilnehmerErgebnisse);
  }
}
