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

public enum WahlartErgebnisartVorlaeufigErfassungsart {

  ERGEBNIS_KOMPLETT { // A.k.a. "Wie endgültiges Ergebnis"...

    @Override
    public boolean isStimmenKomplettErfassbar(Wahl wahl) {
      return true;
    }

    @Override
    public boolean isStimmzettelUngueltigErfassbar(Wahl wahl) {
      return true;
    }

    @Override
    public boolean isStimmzettelNurEinzelnerWahlvorschlagErfassbar(Wahl wahl) {
      return true;
    }

    @Override
    public boolean isStimmzettelNurEinzelnerWahlvorschlagGesamtErfassbar(Wahl wahl) {
      return false;
    }
  },

  // TODO, bspw. BY-LTW -> ERGEBNIS_NUR_GRUPPE_STIMMEN, // A.k.a. "Wie endgültiges Ergebnis ohne Listenkandidaturstimmen"...

  TREND_STIMMZETTEL_NUR_EINZELNER_WAHLVORSCHLAG { // ELECTKOM-749

    @Override
    public boolean isStimmenKomplettErfassbar(Wahl wahl) {
      return false;
    }

    @Override
    public boolean isStimmzettelUngueltigErfassbar(Wahl wahl) {
      return false; // ELECT-9226
    }

    @Override
    public boolean isStimmzettelNurEinzelnerWahlvorschlagErfassbar(Wahl wahl) {
      return true;
    }

    @Override
    public boolean isStimmzettelNurEinzelnerWahlvorschlagGesamtErfassbar(Wahl wahl) {
      return false;
    }
  },

  /**
   * @deprecated MUC-spezifisch!!! Siehe WahlartErgebnisartVorlaeufigErfassungsart#TREND_STIMMZETTEL_NUR_EINZELNER_WAHLVORSCHLAG für eine alternative/bessere Option mit Wichtung der "Stimmzettel mit
   *             Änderungen nur innerhalb genau eines Wahlvorschlages".
   *
   * @see WahlartErgebnisartVorlaeufigErfassungsart#TREND_STIMMZETTEL_NUR_EINZELNER_WAHLVORSCHLAG
   */
  TREND_STIMMZETTEL_NUR_EINZELNER_WAHLVORSCHLAG_GESAMT {

    @Override
    public boolean isStimmenKomplettErfassbar(Wahl wahl) {
      return false;
    }

    @Override
    public boolean isStimmzettelUngueltigErfassbar(Wahl wahl) {
      return true;
    }

    @Override
    public boolean isStimmzettelNurEinzelnerWahlvorschlagErfassbar(Wahl wahl) {
      return false;
    }

    @Override
    public boolean isStimmzettelNurEinzelnerWahlvorschlagGesamtErfassbar(Wahl wahl) {
      return true;
    }
  },

  ;

  private WahlartErgebnisartVorlaeufigErfassungsart() {
  }

  public static WahlartErgebnisartVorlaeufigErfassungsart defaultValue() {
    return ERGEBNIS_KOMPLETT;
  }

  public abstract boolean isStimmenKomplettErfassbar(Wahl wahl);

  public abstract boolean isStimmzettelUngueltigErfassbar(Wahl wahl);

  public abstract boolean isStimmzettelNurEinzelnerWahlvorschlagErfassbar(Wahl wahl);

  public abstract boolean isStimmzettelNurEinzelnerWahlvorschlagGesamtErfassbar(Wahl wahl);
}
