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

import static org.apache.commons.lang3.StringUtils.stripEnd;

import java.text.DecimalFormat;
import java.text.NumberFormat;

public enum StimmeingabePlausiKonfigurationCustomDataKategorie {

  ANZAHL {

    @Override
    public String formatParameterValue(Object parameterValue, StimmeingabePlausiKonfigurationPropertyContext context) {
      if (parameterValue != null) {
        return NumberFormat.getInstance().format(parameterValue);
      }

      return "";
    }
  },

  ANTEIL {

    @Override
    public String formatParameterValue(Object parameterValue, StimmeingabePlausiKonfigurationPropertyContext context) {
      if (parameterValue != null) {
        Double doubleValue = (Double) parameterValue;

        if (doubleValue.compareTo(1D) > 0) {
          return NumberFormat.getInstance().format(doubleValue);
        }

        if (doubleValue.compareTo(1D) < 0) {
          DecimalFormat fractionDigitsOnlyFormat = new DecimalFormat();
          fractionDigitsOnlyFormat.setMaximumIntegerDigits(0);
          fractionDigitsOnlyFormat.setMinimumFractionDigits(6);

          String nonZeroFractionDigitsOnlyFormatted = stripEnd(fractionDigitsOnlyFormat.format(doubleValue * 100D), "0");

          NumberFormat numberFormat = NumberFormat.getPercentInstance();
          numberFormat.setMinimumFractionDigits(nonZeroFractionDigitsOnlyFormatted.length() - 1 /* Separator */);

          return numberFormat.format(doubleValue);
        }
      }

      return "";
    }
  },

  KOMPLEXER_TYP {

    @Override
    public String formatParameterValue(Object parameterValue, StimmeingabePlausiKonfigurationPropertyContext context) {
      if (parameterValue instanceof StimmeingabePlausiKonfigurationCustomDataKategorieKomplexerTyp) {
        StimmeingabePlausiKonfigurationCustomDataKategorieKomplexerTyp kategorieKomplexerTypValue = (StimmeingabePlausiKonfigurationCustomDataKategorieKomplexerTyp) parameterValue;

        return kategorieKomplexerTypValue.formatParameterValue(context);
      }

      return "";
    }
  };

  StimmeingabePlausiKonfigurationCustomDataKategorie() {
  }

  public abstract String formatParameterValue(Object parameterValue, StimmeingabePlausiKonfigurationPropertyContext context);
}
