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

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

public enum PersonStatus {

  UNGEPRUEFT {

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

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

    @Override
    public boolean isPersonenPruefungAutomatischDurchfuehrbar() {
      // Immer eine manuelle Entscheidung und daher nicht automatisch aufzuheben!
      return false;
    }

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

    @Override
    public String getIcon(Icons icons) {
      return icons.getIconZugelassen();
    }
  },
  /**
   * Nicht zu prüfende Personen werden von der Personenprüfung nicht berücksichtigt, sind jedoch ggf. als "geeignet" zu betrachten (z.B. importierte Kandidaten, cf. ELECT-2996).
   */
  NICHT_ZU_PRUEFEN {

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

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

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

  public boolean isPersonenPruefungNachManuellerBearbeitungDurchfuehrbar() {
    return true;
  }

  public boolean isPersonenPruefungAutomatischDurchfuehrbar() {
    return true;
  }

  public boolean isGeeignetOderNichtZuPruefen() {
    return isGeeignet() || isNichtZuPruefen();
  }

  public boolean isUngeprueftOderManuellZuPruefen() {
    return isUngeprueft() || isManuellZuPruefen();
  }

  public boolean isUngeprueft() {
    return UNGEPRUEFT.equals(this);
  }

  public boolean isManuellZuPruefen() {
    return MANUELL_ZU_PRUEFENDER_KONFLIKT_VORHANDEN.equals(this);
  }

  public boolean isGeeignet() {
    return GEEIGNET.equals(this);
  }

  public boolean isNichtZuPruefen() {
    return NICHT_ZU_PRUEFEN.equals(this);
  }

  public abstract String getIcon(Icons icons);
}
