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

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

public enum WahlartStimmenProWaehlerArt {

  FIX {

    @Override
    public boolean isAnzahlStimmenProWaehlerPerWahlartVorgegeben() {
      return true;
    }

    @Override
    public boolean isAnzahlStimmenProWaehlerPerWahlgebietVorgegeben() {
      return false;
    }

    @Override
    public long getAnzahl(AbstractWahlart wahlart, Gebiet wahlgebietOderUntergeordnetesGebiet) {
      Long anzahlStimmenProWaehler = wahlart.getAnzahlStimmenProWaehler();

      if (anzahlStimmenProWaehler != null) {
        return anzahlStimmenProWaehler;
      }

      return 0L;
    }
  },

  ANZAHL_SITZE_WAHLGEBIET { // ELECTKOM-649 == ANZAHL_STIMMEN_PRO_WAEHLER_WAHLGEBIET

    @Override
    public boolean isAnzahlStimmenProWaehlerPerWahlartVorgegeben() {
      return false;
    }

    @Override
    public boolean isAnzahlStimmenProWaehlerPerWahlgebietVorgegeben() {
      return true;
    }

    @Override
    public long getAnzahl(AbstractWahlart wahlart, Gebiet wahlgebietOderUntergeordnetesGebiet) {
      Long anzahlStimmenProWaehler = wahlgebietOderUntergeordnetesGebiet.getAnzahlStimmenProWaehlerImWahlgebiet();

      if (anzahlStimmenProWaehler != null) {
        return anzahlStimmenProWaehler;
      }

      return 0L;
    }
  };

  public abstract long getAnzahl(AbstractWahlart wahlart, Gebiet wahlgebietOderUntergeordnetesGebiet);

  public abstract boolean isAnzahlStimmenProWaehlerPerWahlartVorgegeben();

  public abstract boolean isAnzahlStimmenProWaehlerPerWahlgebietVorgegeben();
}
