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

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

public enum WahlartAnzahlErsatzkandidaturenArt {

  FIX {

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

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

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

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

      return 0L;
    }
  },

  ANZAHL_SITZE_WAHLGEBIET { // ELECT-14034

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

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

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

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

      return 0L;
    }
  };

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

  public abstract boolean isAnzahlPerWahlartVorgegeben();

  public abstract boolean isAnzahlPerWahlgebietVorgegeben();
}
