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

import java.util.ArrayList;
import java.util.Collection;

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

public enum WahlrechtspruefStatus {

  // Wenn Status hinzukommen, auch WahlvorschlagpruefungDokument anpassen

  UNGEPRUEFT {

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

    @Override
    public String bestimmePassendenPrueftext(Pruefkriterium pruefkriterium) {
      return null;
    }

    @Override
    public boolean isZulassenErlaubt(Pruefkriterium pruefkriterium) {
      return !pruefkriterium.getWahlrechtlichRelevant();
    }

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

  },
  ERFUELLT {

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

    @Override
    public String bestimmePassendenPrueftext(Pruefkriterium pruefkriterium) {
      return pruefkriterium.getTextFuerProtokollErfuellt();
    }

    @Override
    public boolean isZulassenErlaubt(Pruefkriterium pruefkriterium) {
      return true;
    }

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

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

    @Override
    public String bestimmePassendenPrueftext(Pruefkriterium pruefkriterium) {
      return pruefkriterium.getTextFuerProtokollNichtErfuellt();
    }

    @Override
    public boolean isZulassenErlaubt(Pruefkriterium pruefkriterium) {
      return !pruefkriterium.getWahlrechtlichRelevant();
    }

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

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

    }

    @Override
    public String bestimmePassendenPrueftext(Pruefkriterium pruefkriterium) {

      return pruefkriterium.getTextFuerProtokollFrist();
    }

    @Override
    public boolean isZulassenErlaubt(Pruefkriterium pruefkriterium) {
      return !pruefkriterium.getWahlrechtlichRelevant();
    }

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

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

    @Override
    public String bestimmePassendenPrueftext(Pruefkriterium pruefkriterium) {
      return null;
    }

    @Override
    public boolean isZulassenErlaubt(Pruefkriterium pruefkriterium) {
      return true;
    }

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

  public abstract String getIcon(Icons icons);

  public abstract String bestimmePassendenPrueftext(Pruefkriterium pruefkriterium);

  public abstract boolean isZulassenErlaubt(Pruefkriterium pruefkriterium);

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

  public boolean isErfuellt() {
    return this.equals(ERFUELLT);
  }

  public boolean isNichtErfuellt() {
    return this.equals(NICHT_ERFUELLT);
  }

  public boolean isFristGesetzt() {
    return this.equals(FRIST_GESETZT);
  }

  public boolean isIrrelevant() {
    return this.equals(IRRELEVANT);
  }

  public abstract boolean isZulassungsbeschraenkend();

  public static Collection<WahlrechtspruefStatus> zulassungsbeschraenkendeStatus() {
    Collection<WahlrechtspruefStatus> result = new ArrayList<>();

    for (WahlrechtspruefStatus wahlrechtspruefStatus : values()) {
      if (wahlrechtspruefStatus.isZulassungsbeschraenkend()) {
        result.add(wahlrechtspruefStatus);
      }
    }

    return result;
  }
}
