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

import static java.util.Objects.nonNull;
import static org.apache.commons.lang3.StringUtils.trimToEmpty;

import java.util.function.Function;

import de.ivu.elect.business.entschaedigung.entity.AbstractEntschaedigungsart;
import de.ivu.elect.business.entschaedigung.entity.EntschaedigungsartConstants;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;
import de.ivu.elect.presentation.entschaedigung.EntschaedigungStatusEntry;
import de.ivu.elect.presentation.table.DefaultColumnEntry;

public class AbstractEntschaedigungStatusEntryColumn extends DefaultColumnEntry<EntschaedigungStatusEntry> {

  private static final long serialVersionUID = 1L;

  public AbstractEntschaedigungStatusEntryColumn(String id, Messages messages, String headerKey, ColumnType type, Function<EntschaedigungStatusEntry, Object> getter, Object... headerParams) {
    super(id, messages, headerKey, type, getter, headerParams);
  }

  public static AbstractEntschaedigungStatusEntryColumn createEntschaedigungStatusEntryBezeichnungColumn(Messages messages) {
    return new EntschaedigungStatusEntryBezeichnungColumn(messages);
  }

  public static AbstractEntschaedigungStatusEntryColumn createEntschaedigungStatusEntryBetragMitWaehrungColumn(Messages messages) {
    return new AbstractEntschaedigungStatusEntryColumn("EntschaedigungStatusEntry-Betrag", messages, AbstractEntschaedigungsart.MESSAGE_KEY_EINZELBETRAG_EINZAHL, ColumnType.STRING,
        EntschaedigungStatusEntry::getEinzelbetragMitWaehrung) {

      private static final long serialVersionUID = 1L;

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

  public static AbstractEntschaedigungStatusEntryColumn createEntschaedigungStatusEntryAnzahlColumn(Messages messages) {
    return new AbstractEntschaedigungStatusEntryColumn("EntschaedigungStatusEntry-Anzahl", messages, "entity.einzahl.ENTSCHAEDIGUNG_STATUS_ENTRY.ANZAHL", ColumnType.LONG,
        EntschaedigungStatusEntry::getAnzahl);
  }

  public static AbstractEntschaedigungStatusEntryColumn createEntschaedigungStatusEntryBetragMitWaehrungAggregiertColumn(Messages messages) {
    return new AbstractEntschaedigungStatusEntryColumn("EntschaedigungStatusEntry-BetragAggregiert", messages, "entity.einzahl.ENTSCHAEDIGUNG_STATUS_ENTRY.GESAMTBETRAG", ColumnType.LONG,
        EntschaedigungStatusEntry::getGesamtbetragMitWaehrung) {

      private static final long serialVersionUID = 1L;

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

  public static class EntschaedigungStatusEntryBezeichnungColumn extends AbstractEntschaedigungStatusEntryColumn {

    private static final long serialVersionUID = 1L;

    public EntschaedigungStatusEntryBezeichnungColumn(Messages messages) {
      super("EntschaedigungStatusEntry-Bezeichnung", messages, EntschaedigungsartConstants.MESSAGE_KEY_BESCHREIBUNG_EINZAHL, ColumnType.STRING, EntschaedigungStatusEntry::getBezeichnung);
    }

    @Override
    public String getTooltip(EntschaedigungStatusEntry entschaedigungStatusEntry) {
      if (nonNull(entschaedigungStatusEntry)) {
        return trimToEmpty(entschaedigungStatusEntry.getBeschreibung());
      }

      return super.getTooltip(entschaedigungStatusEntry);
    }
  }
}
