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

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;

import javax.faces.validator.DoubleRangeValidator;
import javax.faces.validator.Validator;

import de.ivu.elect.jee.presentation.dynamicform.MoneyProperty;

public class EntschaedigungEinzelbetragMoneyProperty extends MoneyProperty {

  private final Double minValue;

  private final Double maxValue;

  public EntschaedigungEinzelbetragMoneyProperty(Entschaedigung entschaedigung) {
    super(entschaedigung.getProperties().getEinzelbetragProperty(), entschaedigung.getWaehrungAlsIsoCode());

    if (entschaedigung.hasEntschaedigungsart()) {
      Entschaedigungsart entschaedigungsart = entschaedigung.getEntschaedigungsart();

      this.minValue = roundToDouble(entschaedigungsart.getEinzelbetragMinimal());
      this.maxValue = roundToDouble(entschaedigungsart.getEinzelbetragMaximal());
    } else {
      this.minValue = null;
      this.maxValue = null;
    }
  }

  @Override
  public Collection<Validator> getValidators() {
    Collection<Validator> result = new ArrayList<>(super.getValidators());

    DoubleRangeValidator doubleRangeValidator = new DoubleRangeValidator();
    doubleRangeValidator.setMinimum(0);
    doubleRangeValidator.setMaximum(Double.MAX_VALUE);

    if (minValue != null) {
      doubleRangeValidator.setMinimum(minValue);
    }

    if (maxValue != null) {
      doubleRangeValidator.setMaximum(maxValue);
    }

    result.add(doubleRangeValidator);

    return result;
  }

  private Double roundToDouble(BigDecimal value) {
    if (value != null) {
      return value.doubleValue();
    }

    return null;
  }
}
