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

public enum ErgebnisartUmschaltbar {

  DEAKTIVIERT {

    @Override
    public boolean isUmschaltbarErgebniseingangErfassen(WahlartErgebnisart aktuelleErgebnisart, boolean letzterEingangGueltig, boolean eingabeMoeglich) {
      return false;
    }

    @Override
    public boolean isUmschaltbarErgebniseingangStatus(WahlartErgebnisart aktuelleErgebnisart) {
      return false;
    }
  },

  JEDERZEIT {

    @Override
    public boolean isUmschaltbarErgebniseingangErfassen(WahlartErgebnisart aktuelleErgebnisart, boolean letzterEingangGueltig, boolean eingabeMoeglich) {
      return true;
    }

    @Override
    public boolean isUmschaltbarErgebniseingangStatus(WahlartErgebnisart aktuelleErgebnisart) {
      return true;
    }
  },

  VORLAEUFIG_NACH_ENDGUELTIG_NACH_GUELTIGEM_EINGANG {

    @Override
    public boolean isUmschaltbarErgebniseingangErfassen(WahlartErgebnisart aktuelleErgebnisart, boolean letzterEingangGueltig, boolean eingabeMoeglich) {
      return !aktuelleErgebnisart.isVorlaeufig() || letzterEingangGueltig && !eingabeMoeglich;
    }

    @Override
    public boolean isUmschaltbarErgebniseingangStatus(WahlartErgebnisart aktuelleErgebnisart) {
      return true;
    }
  },

  NUR_VON_ENDGUELTIG_NACH_VORLAEUFIG {

    @Override
    public boolean isUmschaltbarErgebniseingangErfassen(WahlartErgebnisart aktuelleErgebnisart, boolean letzterEingangGueltig, boolean eingabeMoeglich) {
      return aktuelleErgebnisart.isEndgueltig();
    }

    @Override
    public boolean isUmschaltbarErgebniseingangStatus(WahlartErgebnisart aktuelleErgebnisart) {
      return aktuelleErgebnisart.isEndgueltig();
    }
  },

  ;

  private ErgebnisartUmschaltbar() {
  }

  public boolean isDeaktiviert() {
    return DEAKTIVIERT.equals(this);
  }

  public abstract boolean isUmschaltbarErgebniseingangErfassen(WahlartErgebnisart aktuelleErgebnisart, boolean letzterEingangGueltig, boolean eingabeMoeglich);

  public abstract boolean isUmschaltbarErgebniseingangStatus(WahlartErgebnisart aktuelleErgebnisart);
}
