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

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

import javax.inject.Inject;
import javax.inject.Named;

import org.apache.commons.lang3.StringUtils;

import de.ivu.elect.business.protokollierung.entity.AbstractLoeschProtokoll;
import de.ivu.elect.business.protokollierung.entity.LoeschProtokoll;
import de.ivu.elect.business.security.control.ElectCommonPrincipal;
import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

@Named(LoeschProtokollColumnBuilder.COMPONENT_NAME)
public class LoeschProtokollColumnBuilder extends AbstractColumnBuilder<LoeschProtokoll> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "loeschProtokollColumnBuilder";

  @Inject
  private transient ElectCommonPrincipal principal;

  private AbstractLoeschProtokollColumn<LoeschProtokoll> loeschProtokollZeitpunktColumn;

  private AbstractLoeschProtokollColumn<LoeschProtokoll> loeschProtokollBenutzerkennungColumn;

  private AbstractLoeschProtokollColumn<LoeschProtokoll> loeschProtokollEntitaetColumn;

  private AbstractLoeschProtokollColumn<LoeschProtokoll> loeschProtokollPrimaerschluesselColumn;

  private AbstractLoeschProtokollColumn<LoeschProtokoll> beschreibunColumn;

  public LoeschProtokollColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    loeschProtokollZeitpunktColumn = AbstractLoeschProtokollColumn.createLoeschProtokollZeitpunktColumn(getMessages());
    loeschProtokollBenutzerkennungColumn = AbstractLoeschProtokollColumn.createLoeschProtokollBenutzerkennungColumn(getMessages());
    loeschProtokollEntitaetColumn = AbstractLoeschProtokollColumn.createLoeschProtokollEntitaetColumn(getMessages());
    loeschProtokollEntitaetColumn.setValueLabeler(e -> {
      if (e == null) {
        return null;
      }
      return getMessage(e.toString());
    });

    loeschProtokollPrimaerschluesselColumn = AbstractLoeschProtokollColumn.createLoeschProtokollPrimaerschluesselColumn(getMessages());

    beschreibunColumn = new AbstractLoeschProtokollColumn<>(
        "LoeschProtokoll-Beschreibung", messages, "entity.einzahl.LOESCH_PROTOKOLL.BESCHREIBUNG",
        ColumnType.STRING
        , l -> {
      if (l == null) {
        return null;
      }
      String messageKey = l.getMessageKey();
      Object[] messageParams = null;
      if (StringUtils.isNotBlank(l.getMessageParams())) {
        messageParams = l.getMessageParams().split(Pattern.quote(AbstractLoeschProtokoll.MESSAGE_PARAMS_SEPARATOR));
      }
      if (messageParams == null) {
        return getMessage(messageKey);
      }
      return getMessage(messageKey, messageParams);
    });
  }

  @Override
  protected List<ColumnEntry<? super LoeschProtokoll>> getColumnEntriesSorted() {
    List<ColumnEntry<? super LoeschProtokoll>> result = new ArrayList<>();

    result.add(loeschProtokollZeitpunktColumn);
    result.add(loeschProtokollBenutzerkennungColumn);
    result.add(loeschProtokollEntitaetColumn);
    result.add(beschreibunColumn);
    // result.add(loeschProtokollPrimaerschluesselColumn);

    return result;
  }

}
