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

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

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

import de.ivu.elect.business.entschaedigung.entity.Entschaedigung;
import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.presentation.person.PersonendatenFormatter;
import de.ivu.elect.presentation.person.table.AbstractPersonendatenColumn;
import de.ivu.elect.presentation.person.table.PersonendatenRufnameAnzeigeColumn;

@Named(EntschaedigungColumnBuilder.COMPONENT_NAME)
public class EntschaedigungColumnBuilder extends AbstractColumnBuilder<Entschaedigung> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "entschaedigungColumnBuilder";

  @Inject
  private transient PersonendatenFormatter personendatenFormatter;

  private AbstractEntschaedigungColumn<Entschaedigung> entschaedigungPersonendatenFamiliennameColumn;

  private AbstractEntschaedigungColumn<Entschaedigung> entschaedigungPersonendatenVornameAnzeigeColumn;

  private AbstractEntschaedigungColumn<Entschaedigung> entschaedigungBezeichnungColumn;

  private AbstractEntschaedigungColumn<Entschaedigung> entschaedigungGesamtbetragMitWaehrungColumn;

  public EntschaedigungColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    entschaedigungPersonendatenFamiliennameColumn = new EntschaedigungPersonendatenColumn(getMessages(), AbstractPersonendatenColumn.createPersonendatenFamiliennameColumn(getMessages()));
    entschaedigungPersonendatenVornameAnzeigeColumn = new EntschaedigungPersonendatenColumn(getMessages(), new PersonendatenRufnameAnzeigeColumn<>(getMessages(), personendatenFormatter));

    entschaedigungBezeichnungColumn = AbstractEntschaedigungColumn.createEntschaedigungBezeichnungColumn(getMessages());

    entschaedigungGesamtbetragMitWaehrungColumn = new EntschaedigungGesamtbetragMitWaehrungColumn(getUserLocale(), getMessages());
  }

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

    result.add(entschaedigungPersonendatenFamiliennameColumn);
    result.add(entschaedigungPersonendatenVornameAnzeigeColumn);

    result.add(entschaedigungBezeichnungColumn);

    // NOTE ELECT-8865, dass der Status bewusst NICHT angezeigt wird!!!

    result.add(entschaedigungGesamtbetragMitWaehrungColumn);

    return result;
  }
}
