
package de.ivu.elect.presentation.stimmeingabe.form;

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

import de.ivu.elect.business.stimmeingabe.control.plausi.AbstractStimmeingabeAnzahlComparedToAnzahlAnteilPlausiKonfigurationCustomData;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfigurationPropertyContext;
import de.ivu.elect.jee.presentation.dynamicform.AbstractDoubleProperty;

public abstract class AbstractStimmeingabeAnzahlComparedToAnzahlAnteilPlausiKonfigurationCustomDataAnteilProperty extends AbstractDoubleProperty {

  private final String labelMsgKey;

  private final Consumer<Double> setter;

  private final Supplier<Double> getter;

  protected AbstractStimmeingabeAnzahlComparedToAnzahlAnteilPlausiKonfigurationCustomDataAnteilProperty(StimmeingabePlausiKonfigurationPropertyContext context,
      AbstractStimmeingabeAnzahlComparedToAnzahlAnteilPlausiKonfigurationCustomData customData) {
    this(context, "AbstractStimmeingabeAnzahlComparedToAnzahlAnteilPlausiKonfigurationCustomData.anteil", customData::getAnteil, customData::setAnteil);
  }

  protected AbstractStimmeingabeAnzahlComparedToAnzahlAnteilPlausiKonfigurationCustomDataAnteilProperty(StimmeingabePlausiKonfigurationPropertyContext context, String labelMsgKey,
      Supplier<Double> getter, Consumer<Double> setter) {
    super();

    this.labelMsgKey = labelMsgKey;

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

  @Override
  public String getDefaultLabel() {
    return getMessage(labelMsgKey);
  }

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

  @Override
  public Double getValue() {
    return getter.get() * 100D;
  }

  @Override
  public void setValue(Double value) {
    setter.accept(value / 100D);
  }

  @Override
  public long getMinValue() {
    return 0L;
  }

  @Override
  public long getMaxValue() {
    return 100L;
  }
}
