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

import java.util.function.Supplier;

import de.ivu.elect.business.ergebnis.entity.Ergebnisart;

/**
 * Erzeugte Präsentation über Servlet bereitstellen
 */
public enum PraesentationBereitstellen {

  VOLLSTAENDIG {
    @Override
    public boolean isAktiviert(Ergebnisart ergebnisart, Supplier<Boolean> isOberstesGebietFreigegeben) {
      return VORLAEUFIGES_ERGEBNIS.isAktiviert(ergebnisart, isOberstesGebietFreigegeben) || ENDGUELTIGES_ERGEBNIS
          .isAktiviert(ergebnisart, isOberstesGebietFreigegeben);
    }
  },
  VORLAEUFIGES_ERGEBNIS_ENDGUELTIG_WENN_FREIGEGEBEN {
    @Override
    public boolean isAktiviert(Ergebnisart ergebnisart, Supplier<Boolean> isOberstesGebietFreigegeben) {
      return VORLAEUFIGES_ERGEBNIS.isAktiviert(ergebnisart, isOberstesGebietFreigegeben) || (ENDGUELTIGES_ERGEBNIS
          .isAktiviert(ergebnisart, isOberstesGebietFreigegeben) && isOberstesGebietFreigegeben.get());
    }
  },
  VORLAEUFIGES_ERGEBNIS {
    @Override
    public boolean isAktiviert(Ergebnisart ergebnisart, Supplier<Boolean> isOberstesGebietFreigegeben) {
      return Ergebnisart.VORLAEUFIG.equals(ergebnisart);
    }
  },
  ENDGUELTIGES_ERGEBNIS {
    @Override
    public boolean isAktiviert(Ergebnisart ergebnisart, Supplier<Boolean> isOberstesGebietFreigegeben) {
      return Ergebnisart.ENDGUELTIG.equals(ergebnisart);
    }
  },
  DEAKTIVIERT {
    @Override
    public boolean isAktiviert(Ergebnisart ergebnisart, Supplier<Boolean> isOberstesGebietFreigegeben) {
      return false;
    }
  };

  public abstract boolean isAktiviert(Ergebnisart ergebnisart, Supplier<Boolean> isOberstesGebietFreigegeben);

}
