
package de.ivu.elect.presentation.wahllokalsystem.table;

import java.util.Date;

import javax.annotation.Nullable;

import de.ivu.elect.business.wahllokalsystem.entity.WahllokalsystemStatus;
import de.ivu.elect.business.wahllokalsystem.entity.WahllokalsystemStatusConstants;
import de.ivu.elect.business.wahllokalsystem.entity.WahllokalsystemStatusOnline;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.Icons;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

public class WahllokalsystemStatusLetzteMeldungColumn extends AbstractWahllokalsystemStatusColumn<WahllokalsystemStatus> {

  private static final long serialVersionUID = 1L;

  private final Icons icons;

  private final Date now;

  private final Long timeoutInSeconds;

  public WahllokalsystemStatusLetzteMeldungColumn(Messages messages, Icons icons, Date now, Long timeoutInSeconds) {
    super("WahllokalsystemStatus-LetzteMeldung", messages, WahllokalsystemStatusConstants.MESSAGE_KEY_LETZTE_MELDUNG_EINZAHL, ColumnType.TIMESTAMP, WahllokalsystemStatus::getLetzteMeldung);

    this.icons = icons;

    this.now = now;
    this.timeoutInSeconds = timeoutInSeconds;
  }

  @Override
  public boolean isIconPresent() {
    return timeoutInSeconds != null;
  }

  @Override
  public boolean isIconRendered(WahllokalsystemStatus entity) {
    return isIconPresent();
  }

  @Override
  public String getTooltip(WahllokalsystemStatus entity) {
    if (isIconPresent()) {
      return getMessage(getStatusOnline(entity));
    }

    return super.getTooltip(entity);
  }

  private WahllokalsystemStatusOnline getStatusOnline(WahllokalsystemStatus entity) {
    return entity.getWahllokalsystemStatusOnline(now, timeoutInSeconds);
  }

  @Nullable
  @Override
  public String getIcon(WahllokalsystemStatus entity) {
    return getStatusOnline(entity).getIcon(icons);
  }
}
