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

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

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

import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.veranstaltung.entity.Teilnahme;
import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.presentation.person.PersonendatenArtFormatter;
import de.ivu.elect.presentation.person.PersonendatenFormatter;
import de.ivu.elect.presentation.person.table.AbstractPersonendatenColumn;
import de.ivu.elect.presentation.person.table.PersonendatenArtColumn;
import de.ivu.elect.presentation.person.table.PersonendatenVornamenAnzeigeColumn;

@Named(TeilnahmeColumnBuilder.COMPONENT_NAME)
public class TeilnahmeColumnBuilder extends AbstractColumnBuilder<Teilnahme> {

  public static final String COMPONENT_NAME = "teilnahmeColumnBuilder";

  private static final long serialVersionUID = 1L;

  @Inject
  private transient PersonendatenFormatter personendatenFormatter;

  @Inject
  private transient PersonendatenArtFormatter personendatenArtFormatter;

  protected AbstractTeilnahmeColumn<Teilnahme> teilnahmeTeilnehmerRolleColumn;

  protected AbstractTeilnahmeColumn<Teilnahme> teilnahmeTeilnehmerStatusColumn;

  protected AbstractTeilnahmeColumn<Teilnahme> teilnahmePersonendatenArtColumn;

  protected TeilnahmeGebietColumn teilnahmeGebietColumn;

  protected AbstractTeilnahmeColumn<Teilnahme> teilnahmePersonendatenFamiliennameColumn;

  protected AbstractTeilnahmeColumn<Teilnahme> teilnahmePersonendatenVornamenColumn;

  protected AbstractTeilnahmeColumn<Teilnahme> teilnahmeBemerkungColumn;

  public TeilnahmeColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    teilnahmeTeilnehmerRolleColumn = AbstractTeilnahmeColumn.createTeilnahmeTeilnehmerRolleColumn(getMessages());
    teilnahmeTeilnehmerStatusColumn = AbstractTeilnahmeColumn.createTeilnahmeTeilnehmerStatusColumn(getMessages());
    teilnahmePersonendatenArtColumn = new TeilnahmePersonendatenWrapperColumnWrapper<>(getMessages(), new PersonendatenArtColumn<>(getMessages(), personendatenArtFormatter, "person.typ.teilnehmer.header"), Personendaten.class);
    teilnahmeGebietColumn = new TeilnahmeGebietColumn(getMessages());
    teilnahmePersonendatenFamiliennameColumn = new TeilnahmePersonendatenWrapperColumnWrapper<>(getMessages(), AbstractPersonendatenColumn.createPersonendatenFamiliennameColumn(getMessages()),
        Personendaten.class);
    teilnahmePersonendatenVornamenColumn = new TeilnahmePersonendatenWrapperColumnWrapper<>(getMessages(), new PersonendatenVornamenAnzeigeColumn<>(getMessages(), personendatenFormatter),
        Personendaten.class);
    teilnahmeBemerkungColumn = AbstractTeilnahmeColumn.createTeilnahmeBemerkungColumn(getMessages());
  }

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

    result.add(teilnahmeTeilnehmerRolleColumn);
    result.add(teilnahmeTeilnehmerStatusColumn);
    result.add(teilnahmePersonendatenArtColumn);
    result.add(teilnahmeGebietColumn);
    result.add(teilnahmePersonendatenFamiliennameColumn);
    result.add(teilnahmePersonendatenVornamenColumn);
    result.add(teilnahmeBemerkungColumn);

    return result;
  }
}
