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

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

import org.apache.commons.lang3.StringUtils;

import de.ivu.elect.business.personenpruefung.entity.PersonPruefungKonfiguration;
import de.ivu.elect.business.personenpruefung.entity.PersonPruefungKonfigurationConstants;
import de.ivu.elect.business.personenpruefung.entity.PersonPruefungKonfigurationCustomData;
import de.ivu.elect.business.personenpruefung.entity.PersonPruefungKonfigurationCustomDataKategorie;
import de.ivu.elect.business.personenpruefung.entity.PersonPruefungKonfigurationPropertyContext;
import de.ivu.elect.jee.entity.customdata.EmptyCustomData;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;
import de.ivu.elect.util.StringJoiner;

public class PersonPruefungKonfigurationCustomDataColumn extends AbstractPersonPruefungKonfigurationColumn<PersonPruefungKonfiguration> {

  private static final long serialVersionUID = 1L;

  protected PersonPruefungKonfigurationCustomDataColumn(Messages messages) {
    super("PersonPruefungKonfiguration-CustomData", messages, PersonPruefungKonfigurationConstants.MESSAGE_KEY_CUSTOM_DATA_STORAGE_ID_MEHRZAHL, ColumnType.STRING,
        personPruefungKonfiguration -> formatValue(personPruefungKonfiguration, new PersonPruefungKonfigurationPropertyContext(messages)));
  }

  private static String formatValue(PersonPruefungKonfiguration personPruefungKonfiguration, PersonPruefungKonfigurationPropertyContext context) {
    if (personPruefungKonfiguration.getCustomData() instanceof EmptyCustomData) {
      return StringUtils.EMPTY;
    }

    PersonPruefungKonfigurationCustomData customData = personPruefungKonfiguration.getCustomData(PersonPruefungKonfigurationCustomData.class);

    List<String> parametersFormatted = new ArrayList<>();

    for (PersonPruefungKonfigurationCustomDataKategorie kategorie : PersonPruefungKonfigurationCustomDataKategorie.values()) {
      List<Object> parameters = customData.getParameters().get(kategorie);

      if (parameters != null) {
        for (Object parameter : parameters) {
          parametersFormatted.add(kategorie.formatParameterValue(parameter, context));
        }
      }
    }

    return StringJoiner.joinWithComma(parametersFormatted);
  }
}
