package de.ivu.elect.business.hochrechnung.control;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import de.ivu.elect.business.ergebnis.entity.Stimmenart;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.hochrechnung.entity.ZufaelligeGueltigeStimmenAnteileNormalverteilungKonfiguration;
import de.ivu.elect.business.hochrechnung.entity.ZufaelligeGueltigeStimmenanteileGenerator;

public class ZufaelligeGueltigeStimmenanteileNormalverteilungGenerator extends ZufaelligeGueltigeStimmenanteileGenerator {

  ZufaelligeGueltigeStimmenAnteileNormalverteilungKonfiguration konfiguration;

  public ZufaelligeGueltigeStimmenanteileNormalverteilungGenerator(ZufaelligeGueltigeStimmenAnteileNormalverteilungKonfiguration konfiguration) {
    this.konfiguration = konfiguration;
  }

  @Override
  public Map<Stimmenart, Double> generateZufaelligeGueltigeStimmenanteile(Gebiet gebiet, List<Stimmenart> stimmenarten) {
    Map<Stimmenart, Double> result = new HashMap<>();
    stimmenarten.forEach(stimmenart -> result.put(stimmenart, getZufaelligeGueltigeStimmenanteil()));
    return result;
  }

  private double getZufaelligeGueltigeStimmenanteil () {
    return trimAnteil(konfiguration.getNormalDistributionFuerGueltigeStimmenanteil().sample());
  }

  private double trimAnteil(double anteil) {
    double gueltigeStimmenanteilMin = konfiguration.getGueltigeStimmenanteilMin();
    if (anteil >= gueltigeStimmenanteilMin && anteil <= 1) {
      return anteil;
    }
    return anteil > 1? 1 : gueltigeStimmenanteilMin;
  }
}
