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

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import de.ivu.elect.jee.presentation.dynamicform.AbstractEnumProperty;
import de.ivu.elect.jee.presentation.dynamicform.AbstractStringProperty;
import de.ivu.elect.jee.presentation.dynamicform.Property;

public class AbstractEntschaedigungsartKriteriumEinsatzProperty<T extends EntschaedigungsartKriterium> extends AbstractEntschaedigungsartKriteriumProperty {

  public AbstractEntschaedigungsartKriteriumEinsatzProperty(Entschaedigungsart entschaedigungsart, AbstractStringProperty kriteriumProperty, T valueIrrelevant, Collection<T> values) {
    super(kriteriumProperty, asJoinedList(valueIrrelevant, values));

    setVisible(entschaedigungsart.isBerechnetPerEinsatz());
  }

  @Override
  public void onObservedPropertyValueChanged(Property observedProperty) {
    if (observedProperty instanceof AbstractEnumProperty< ? >) {
      AbstractEnumProperty< ? > observedEnumProperty = (AbstractEnumProperty< ? >) observedProperty;

      if (EntschaedigungsartBerechnungsart.class.equals(observedEnumProperty.getPropertyEnumClass())) {
        setVisible(EntschaedigungsartBerechnungsart.PER_EINSATZ.equals(observedEnumProperty.getValue()));
      }
    }
  }

  private static <T extends EntschaedigungsartKriterium> List<T> asJoinedList(T valueIrrelevant, Collection<T> values) {
    List<T> result = new ArrayList<>(values);
    result.add(0, valueIrrelevant);

    return result;
  }
}
