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

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

public interface AnzahlStimmenProWaehlerNachStimmenartBestimmer {

  Long getAnzahlStimmenProWaehlerProDirektkandidaturMaximalPerGebiet(Gebiet gebiet);
  Long getAnzahlStimmenProWaehlerProListenkandidaturMaximalPerGebiet(Gebiet gebiet);

  double getAnteilVomWaehlerBenutzteStimmenDurchschnittlich(Stimmenart stimmenart, Gebiet gebiet);

  Long getAnzahlStimmenProWaehlerProStimmenartMaximal(Stimmenart stimmenart, Gebiet gebiet);

  default Long getAnzahlVomWaehlerBenutzteStimmenDurchschnittlich(Stimmenart stimmenart, Gebiet gebiet) {
    Long anzahlStimmenProWaehlerMaximal = getAnzahlStimmenProWaehlerProStimmenartMaximal(stimmenart, gebiet);
    if (anzahlStimmenProWaehlerMaximal == null) {
      return null;
    }
    double anteil = getAnteilVomWaehlerBenutzteStimmenDurchschnittlich(stimmenart, gebiet);
    return Math.round(anteil * anzahlStimmenProWaehlerMaximal);
  }
}
