
package de.ivu.elect.presentation.statistik;

import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;

import javax.faces.convert.Converter;

import org.apache.commons.lang3.StringUtils;

import de.ivu.elect.business.statistik.entity.StatistikLauf;
import de.ivu.elect.business.statistik.entity.StatistikLaufConstants;
import de.ivu.elect.jee.faces.EntityConverter;
import de.ivu.elect.jee.faces.UserLocale;
import de.ivu.elect.jee.presentation.dynamicform.AbstractSelectOneMenuProperty;

public class StatistikLaufSelectOneMenuProperty extends AbstractSelectOneMenuProperty<StatistikLauf> {

  private final List<StatistikLauf> values;

  private final Consumer<StatistikLauf> setter;

  private final Supplier<StatistikLauf> getter;

  public StatistikLaufSelectOneMenuProperty(List<StatistikLauf> values, Consumer<StatistikLauf> setter, Supplier<StatistikLauf> getter) {
    super();

    this.values = values;

    this.setter = setter;
    this.getter = getter;
  }

  @Override
  public String getDefaultLabel() {
    return getMessage(StatistikLaufConstants.MESSAGE_KEY_ENTITY_EINZAHL);
  }

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

  @Override
  public Converter getDefaultConverter() {
    return EntityConverter.getInstance();
  }

  @Override
  public StatistikLauf getValue() {
    return getter.get();
  }

  @Override
  public void setValue(StatistikLauf statistikLauf) {
    setter.accept(statistikLauf);
  }

  @Override
  public List<StatistikLauf> getValues() {
    return values;
  }

  @Override
  public String getItemLabel(StatistikLauf statistikLauf) {
    String label = statistikLauf.getTageBisZurWahlLokalized(getMessages());

    label += " (" + UserLocale.formatDateTimeMedium(statistikLauf.getZeitpunktDesLaufs(), getUserLocale()) + ")";

    if (StringUtils.isNotBlank(statistikLauf.getBeschreibung())) {
      label += " - " + statistikLauf.getBeschreibung();
    }
    return label;
  }
}
