
package de.ivu.elect.business.wahlvorschlag.boundary;

import de.ivu.elect.business.kandidatur.entity.Listenkandidatur;
import de.ivu.elect.business.pruefung.boundary.ZulassungPruefer;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;
import de.ivu.elect.jee.presentation.charts.AbstractChartModelBuilder;

public enum WahlvorschlagStatusFuerStatusuebersicht {

  ZUGELASSEN {

    @Override
    public String getColor() {
      return AbstractChartModelBuilder.GRUEN;
    }

    @Override
    public boolean hasWahlvorschlagStatus(Wahlvorschlag entity, ZulassungPruefer zulassungPruefer) {
      return entity.getWahlvorschlagStatus().isZugelassen();
    }

    @Override
    public boolean hasListenkandidaturStatus(Listenkandidatur listenkandidaturen, ZulassungPruefer zulassungPruefer) {
      return listenkandidaturen.getKandidaturStatus().isZugelassen();
    }
  },

  OFFEN_ZULASSUNG_ERLAUBT {

    @Override
    public String getColor() {
      return AbstractChartModelBuilder.GELB;
    }

    @Override
    public boolean hasWahlvorschlagStatus(Wahlvorschlag entity, ZulassungPruefer zulassungPruefer) {
      return entity.getWahlvorschlagStatus().isUngeprueft() && zulassungPruefer.isZulassenErlaubt(entity);
    }

    @Override
    public boolean hasListenkandidaturStatus(Listenkandidatur entity, ZulassungPruefer zulassungPruefer) {
      return entity.getKandidaturStatus().isUngeprueft() && zulassungPruefer.isZulassenErlaubt(entity);
    }
  },

  OFFEN_ZULASSUNG_NICHT_ERLAUBT {

    @Override
    public String getColor() {
      return AbstractChartModelBuilder.ORANGE;
    }

    @Override
    public boolean hasWahlvorschlagStatus(Wahlvorschlag entity, ZulassungPruefer zulassungPruefer) {
      return entity.getWahlvorschlagStatus().isUngeprueft() && !zulassungPruefer.isZulassenErlaubt(entity);
    }

    @Override
    public boolean hasListenkandidaturStatus(Listenkandidatur entity, ZulassungPruefer zulassungPruefer) {
      return entity.getKandidaturStatus().isUngeprueft() && !zulassungPruefer.isZulassenErlaubt(entity);
    }
  },

  NICHT_ZUGELASSEN {

    @Override
    public String getColor() {
      return AbstractChartModelBuilder.ROT;
    }

    @Override
    public boolean hasWahlvorschlagStatus(Wahlvorschlag entity, ZulassungPruefer zulassungPruefer) {
      return entity.getWahlvorschlagStatus().isNichtZugelassenOderNichtMehrZugelassen();
    }

    @Override
    public boolean hasListenkandidaturStatus(Listenkandidatur entity, ZulassungPruefer zulassungPruefer) {
      return entity.getKandidaturStatus().isNichtZugelassenOderNichtMehrZugelassen();
    }
  };

  public abstract boolean hasWahlvorschlagStatus(Wahlvorschlag entity, ZulassungPruefer zulassungPruefer);

  public abstract boolean hasListenkandidaturStatus(Listenkandidatur entity, ZulassungPruefer zulassungPruefer);

  public abstract String getColor();
}
