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

// Cf. https://support.elect-it.com/wiki/display/ELECT/Kopfzahlenkonfiguration!
public enum UmgangAWerte {

  NICHT_VORHANDEN {

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

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

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

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

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

    @Override
    public boolean isAWertBeiStimmeingabeZuPlausibilisierenGegenAWertAmGebiet() {
      return false;
    }
  },

  /**
   * A.k.a. VORHANDEN_ABER_NICHT_ERFASSEN_ODER_ANZEIGEN...
   */
  NUR_AUSWERTEN {

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

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

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

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

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

    @Override
    public boolean isAWertBeiStimmeingabeZuPlausibilisierenGegenAWertAmGebiet() {
      return false;
    }
  },

  ANZEIGEN {

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

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

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

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

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

    @Override
    public boolean isAWertBeiStimmeingabeZuPlausibilisierenGegenAWertAmGebiet() {
      return false;
    }
  },

  ERFASSEN_ODER_ANZEIGEN_NACH_WERTE_AM_GEBIET {

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

    @Override
    public boolean isAWertAmGebietErfassbar() {
      return true; // ELECT-7508
    }

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

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

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

    @Override
    public boolean isAWertBeiStimmeingabeZuPlausibilisierenGegenAWertAmGebiet() {
      return false;
    }
  },

  ERFASSEN {

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

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

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

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

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

    @Override
    public boolean isAWertBeiStimmeingabeZuPlausibilisierenGegenAWertAmGebiet() {
      return false;
    }
  },

  /**
   * A.k.a. ERFASSEN_UND_PRUEFEN_GEGEN_WERT_AM_GEBIET...
   */
  ERFASSEN_UND_PRUEFEN {

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

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

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

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

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

    @Override
    public boolean isAWertBeiStimmeingabeZuPlausibilisierenGegenAWertAmGebiet() {
      return true;
    }
  },

  ;

  private UmgangAWerte() {
  }

  public abstract boolean isAWerteImportNotwendig();

  public abstract boolean isAWertAmGebietErfassbar();

  public abstract boolean isAWertBeiStimmeingabeImmerNurAnzuzeigen();

  public abstract boolean isAWertBeiStimmeingabeImmerZuErfassenExklusiveVorbelegung();

  public abstract boolean isAWertBeiStimmeingabeImmerZuErfassenInklusiveVorbelegung();

  public boolean isAWertBeiStimmeingabeInitialVorzubelegen() {
    return isAWertBeiStimmeingabeImmerNurAnzuzeigen() || isAWertBeiStimmeingabeImmerZuErfassenInklusiveVorbelegung();
  }

  public boolean isAWertBeiStimmeingabeZuErfassenOderAnzuzeigen() {
    return isAWertBeiStimmeingabeZuErfassen() || isAWertBeiStimmeingabeAnzuzeigen();
  }

  public boolean isAWertBeiStimmeingabeZuErfassen() {
    return isAWertBeiStimmeingabeImmerZuErfassenExklusiveVorbelegung() || isAWertBeiStimmeingabeImmerZuErfassenInklusiveVorbelegung();
  }

  public boolean isAWertBeiStimmeingabeAnzuzeigen() {
    return isAWertBeiStimmeingabeImmerNurAnzuzeigen();
  }

  public abstract boolean isAWertBeiStimmeingabeZuPlausibilisierenGegenAWertAmGebiet();
}
