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

import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;

import de.ivu.elect.business.auffaelligkeit.entity.AuffaelligkeitBemerkung;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabeAuffaelligkeit;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

public class StimmeingabeAuffaelligkeitBemerkungenColumn extends AbstractStimmeingabeAuffaelligkeitColumn {

  private static final long serialVersionUID = 1L;
  private Locale locale;

  public StimmeingabeAuffaelligkeitBemerkungenColumn(Locale locale, Messages messages) {
    super(messages);
    this.locale = locale;
  }

  @Override
  public Object getValue(StimmeingabeAuffaelligkeit entity) {
    if (entity == null) {
      return "";
    }
    List<AuffaelligkeitBemerkung> bemerkungen = entity.getBemerkungen();
    return getBemerkungenFormatted(bemerkungen);
  }

  private Object getBemerkungenFormatted(List<AuffaelligkeitBemerkung> bemerkungen) {
    String delimiter = "\n";
    return bemerkungen.stream().map(this::getAuffaelligkeitBemerkungFormatted).collect(Collectors.joining(delimiter));
  }

  private String getAuffaelligkeitBemerkungFormatted(AuffaelligkeitBemerkung bemerkung) {
    return bemerkung.getAuffaelligkeitBemerkungAlsString(locale, getMessages());
  }

  @Override
  public String getHeader() {
    return getMessage("stimmen.auffaelligkeit.suche.bemerkungen.header");
  }

  @Override
  public ColumnType getType() {
    return ColumnType.STRING;
  }
}