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

import de.ivu.elect.jee.presentation.Icons;

public enum GewaehltStatus {

  /*Bei Ergänzugen auch ListenkandidaturStimmenDiagrammInternetWidgetCustomData anpassen(!)*/
  /*Bei Ergänzugen auch de.ivu.elect.internet.presentation.widget.akkordeon.ListenkandidaturAkkordeonKonfiguration.getListenkandidaturGewaehlt anpassen(!)*/

  // auch für ELECT-3613
  // *******************************  Reihenfolge belassen, spielt für Comparator eine Rolle (GewaehltByIsGewaehltAndRangComparator) **********************************************

  /** der Kandidat wurde gewählt (d.h. in der Regel: er erhält einen Sitz) */
  GEWAEHLT {

    @Override
    public String getIcon(Icons icons) {
      return icons.getIconCheck();
    }

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

  /**
   * Das Ergebnis der Sitzverteilung steht noch nicht vollständig fest und hängt noch von einem offenen Losentscheid ab.
   * Abhängig von dessen Ausgang kann der Kandidat gewählt sein oder nicht.
   */
  LOS_OFFEN {

    @Override
    public String getIcon(Icons icons) {
      return icons.getIconQuestion();
    }

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

  /**
   * der Kandidat ist nicht gewählt, ist aber Nachrücker (nur wenn die Sitzverteilung die Bestimmung der Nachrücker
   * einschließt)
   */
  NACHRUECKER {

    @Override
    public String getIcon(Icons icons) {
      return icons.getIconExport();
    }

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

  /**
   * ELECT-8459
   */
  STICHWAHL {

    @Override
    public String getIcon(Icons icons) {
      return icons.getIconRefresh();
    }

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

  /**
   * der Kandidat war zur Wahl zugelassen, wurde aber nicht gewählt. Er ist auch kein Nachrücker oder die Sitzverteilung
   * schließt die Bestimmung der Nachrücker nicht ein.
   */
  NICHT_GEWAEHLT {

    @Override
    public String getIcon(Icons icons) {
      return icons.getIconClose();
    }
  },

  /** der Kandidat war nicht zur Wahl zugelassen */
  NICHT_ZUGELASSEN {

    @Override
    public String getIcon(Icons icons) {
      return icons.getIconNichtZugelassen();
    }

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

    /**
     * Wenn für einen Kandidaten kein Gewaehlt-Objekt erzeugt wird, hat das folgende BEdeutung: Dies sollte nur noch
     * vorkommen bei Listenkandidaten von nicht zugelassenen Listen oder bei alten Algorithmen für Kandidaten, die
     * zukünftig einen der Status NICHT_GEWAEHLT oder NICHT_ZUGELASSEN erhalten - also nicht gewählt und auch kein
     * Nachrücker.
     */
  };

  GewaehltStatus() {
  }

  public abstract String getIcon(Icons icons);

  public boolean isZugelassen() {
    return true;
  }

  public boolean isGewaehlt() {
    return false;
  }

  public boolean isLosOffen() {
    return false;
  }

  public boolean isNachruecker() {
    return false;
  }

  public boolean isStichwahl() {
    return false;
  }
}
