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

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

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

import de.ivu.elect.business.stimmeingabe.entity.*;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;
import de.ivu.elect.util.StringJoiner;

public class StimmeingabePlausiKonfigurationCustomDataColumn extends AbstractStimmeingabePlausiKonfigurationColumn<StimmeingabePlausiKonfiguration> {

  private static final long serialVersionUID = 1L;

  private final StimmeingabePlausiKonfigurationPropertyContext context;

  public StimmeingabePlausiKonfigurationCustomDataColumn(Messages messages, StimmeingabePlausiKonfigurationPropertyContext context) {
    super("StimmeingabePlausiDefinition-CustomData", messages, StimmeingabePlausiKonfigurationConstants.MESSAGE_KEY_CUSTOM_DATA_STORAGE_ID_MEHRZAHL, ColumnType.STRING,
        stimmeingabePlausiKonfiguration -> formatValue(stimmeingabePlausiKonfiguration, context));
    this.context = context;
  }

  private static String formatValue(StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration, StimmeingabePlausiKonfigurationPropertyContext context) {
    StimmeingabePlausiKonfigurationCustomData stimmeingabePlausiKonfigurationCustomData = stimmeingabePlausiKonfiguration.getCustomData(StimmeingabePlausiKonfigurationCustomData.class);

    List<String> parametersFormatted = new ArrayList<>();
    for (StimmeingabePlausiKonfigurationCustomDataKategorie kategorie : StimmeingabePlausiKonfigurationCustomDataKategorie.values()) {
      List<Object> parameters = stimmeingabePlausiKonfigurationCustomData.getParameters().get(kategorie);
      if (parameters != null) {
        for (Object parameter : parameters) {
          parametersFormatted.add(kategorie.formatParameterValue(parameter, context));
        }
      }
    }

    return StringJoiner.joinWithComma(parametersFormatted);
  }

  @Override
  public String getStyle() {
    return trimToEmpty(super.getStyle()) + " ui-dt-c-numeric";
  }
}
