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

import java.util.Date;

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

public enum WahllokalsystemStatusOnline {

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

    @Override
    public String getColor() {
      return AbstractChartModelBuilder.GRAU;
    }
  },
  ONLINE {
    @Override
    public String getIcon(Icons icons) {
      return icons.getIconReplikation();
    }

    @Override
    public String getColor() {
      return AbstractChartModelBuilder.GRUEN;
    }
  },
  OFFLINE {
    @Override
    public String getIcon(Icons icons) {
      return icons.getIconProblem();
    }

    @Override
    public String getColor() {
      return AbstractChartModelBuilder.ORANGE;
    }
  },
  ABGEMELDET {
    @Override
    public String getIcon(Icons icons) {
      return icons.getIconLock();
    }

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

  public abstract String getIcon(Icons icons);

  public abstract String getColor();

  public static WahllokalsystemStatusOnline from(Date now, Date letzteMeldung, Date letzteAbmeldung, Long timeoutInSeconds) {
    if (letzteMeldung == null) {
      return UNBEKANNT;
    }

    if (letzteAbmeldung != null && letzteAbmeldung.getTime() >= letzteMeldung.getTime()) {
      return ABGEMELDET;
    }

    if (timeoutInSeconds == null) {
      return UNBEKANNT;
    }

    if (now.getTime() - letzteMeldung.getTime() > timeoutInSeconds * 1000L) {
      return OFFLINE;
    }

    return ONLINE;

  }
}
