package de.ivu.elect.business.stimmeingabe.control.fiktive;

import java.util.List;

import de.ivu.elect.business.stimmeingabe.entity.Stimmeingabe;

class SkalierterVerteilungsSchluessel implements VerteilungsSchluessel {
  private final VerteilungsSchluessel wrapped;
  private final StimmeingabeSkalierer stimmeingabeSkalierer;

  public SkalierterVerteilungsSchluessel(VerteilungsSchluessel wrapped,
      StimmeingabeSkalierer stimmeingabeSkalierer) {
    this.wrapped = wrapped;
    this.stimmeingabeSkalierer = stimmeingabeSkalierer;
  }

  @Override
  public int getAnzahl(List<Stimmeingabe> stimmeingabeList) {
    return wrapped.getAnzahl(stimmeingabeList);
  }

  @Override
  public double getSumme(List<Stimmeingabe> stimmeingabeList) {
    double result = 0d;
    for (int i = 0; i < getAnzahl(stimmeingabeList); i++) {
      result += getWert(i, stimmeingabeList.get(i));
    }
    return result;
  }

  @Override
  public double getWert(int index, Stimmeingabe stimmeingabe) {
    return stimmeingabeSkalierer.berechneSkalierungsfaktor(stimmeingabe) * wrapped.getWert(index, stimmeingabe);
  }
}
