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

import de.ivu.elect.presentation.system.PercentUtil;

import java.math.BigDecimal;

/**
 * ACHTUNG: Auch im choice lokalisieren von StimmeingabePlausiTyp.GRUPPE_LISTENSTIMMEN_ANTEIL_COMPARED_TO_VORPERIODE_KLEINER_GLEICH_SCHWELLWERT.fehlermeldung
 */
public enum GruppeStimmenAnteilComparedToVorperiodeSchwellwertTyp {

  PROZENTPUNKTE(0) {
    @Override
    public BigDecimal calculateAbweichung(Long gruppeStimmen, Long gueltigeStimmen, Long gruppeStimmenVorperiode, Long gueltigeStimmenVorperiode) {
      return PercentUtil.percentDifference(gueltigeStimmen, gruppeStimmen, gueltigeStimmenVorperiode, gruppeStimmenVorperiode);
    }
  },

  PROZENT(1) {
    @Override
    public BigDecimal calculateAbweichung(Long gruppeStimmen, Long gueltigeStimmen, Long gruppeStimmenVorperiode, Long gueltigeStimmenVorperiode) {
      BigDecimal anteil = PercentUtil.percentGerundetNachkommastellenExact(gueltigeStimmen, gruppeStimmen);
      BigDecimal anteilVorperiode = PercentUtil.percentGerundetNachkommastellenExact(gueltigeStimmenVorperiode, gruppeStimmenVorperiode);
      return PercentUtil.percentGerundetNachkommastellenExact(anteilVorperiode, anteil).subtract(new BigDecimal(100));
    }
  }
  ;

  private final int id;

  private  GruppeStimmenAnteilComparedToVorperiodeSchwellwertTyp(int id) {
    this.id = id;
  }

  public int getId() {
    return id;
  }

  public abstract BigDecimal calculateAbweichung(Long gruppeStimmen, Long gueltigeStimmen, Long gruppeStimmenVorperiode, Long gueltigeStimmenVorperiode);
}
