
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.boundary.EntschaedigungExtendedDAO;
import de.ivu.elect.business.entschaedigung.entity.Auszahlung;
import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.presentation.entschaedigung.form.AuszahlungViewFormBuilder;
import de.ivu.elect.presentation.exchange.table.DateiExportDateiDateinameColumn;
import de.ivu.elect.presentation.exchange.table.DateiExportDateiErstellungszeitpunktColumn;

@Named(AuszahlungColumnBuilder.COMPONENT_NAME)
public class AuszahlungColumnBuilder extends AbstractColumnBuilder<Auszahlung> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "auszahlungColumnBuilder";

  @Inject
  private transient EntschaedigungExtendedDAO entschaedigungExtendedDAO;

  private AbstractAuszahlungColumn<Auszahlung> auszahlungBezeichnungColumn;

  private AbstractAuszahlungColumn<Auszahlung> auszahlungErstelltAmColumn;

  private AbstractAuszahlungColumn<Auszahlung> auszahlungDateiExportDateiErstellungszeitpunktColumn;

  private AbstractAuszahlungColumn<Auszahlung> auszahlungDateiExportDateiDateinameColumn;

  private AbstractAuszahlungColumn<Auszahlung> auszahlungEntschaedigungenAnzahlColumn;

  private AbstractAuszahlungColumn<Auszahlung> auszahlungEntschaedigungenGesamtbetragMitWaehrungColumn;

  public AuszahlungColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    auszahlungBezeichnungColumn = AbstractAuszahlungColumn.createAuszahlungBezeichnungColumn(getMessages());
    auszahlungErstelltAmColumn = AbstractAuszahlungColumn.createAuszahlungErstelltAmColumn(getMessages());

    auszahlungDateiExportDateiErstellungszeitpunktColumn = new AuszahlungDateiExportColumn(getMessages(), new DateiExportDateiErstellungszeitpunktColumn(getMessages())) {

      private static final long serialVersionUID = 1L;

      @Override
      public String getHeader() {
        return getMessage(AuszahlungViewFormBuilder.MSG_KEY_AUSZAHLUNG_DATEI_EXPORT_ZEITPUNKT_EINZAHL);
      }
    };
    auszahlungDateiExportDateiDateinameColumn = new AuszahlungDateiExportColumn(getMessages(), new DateiExportDateiDateinameColumn(getMessages()));

    auszahlungEntschaedigungenAnzahlColumn = new AuszahlungEntschaedigungenAnzahlColumn(getMessages(), entschaedigungExtendedDAO);
    auszahlungEntschaedigungenGesamtbetragMitWaehrungColumn = new AuszahlungEntschaedigungenGesamtbetragMitWaehrungColumn(getUserLocale(), getMessages(), entschaedigungExtendedDAO);
  }

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

    result.add(auszahlungBezeichnungColumn);

    result.add(auszahlungErstelltAmColumn);

    result.add(auszahlungDateiExportDateiErstellungszeitpunktColumn);
    result.add(auszahlungDateiExportDateiDateinameColumn);

    result.add(auszahlungEntschaedigungenAnzahlColumn);
    result.add(auszahlungEntschaedigungenGesamtbetragMitWaehrungColumn);

    return result;
  }
}
