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

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

import javax.enterprise.inject.Specializes;

import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.presentation.anschrift.table.EntityMitAnschriftColumns;
import de.ivu.elect.presentation.person.table.AbstractPersonendatenColumn;
import de.ivu.elect.presentation.table.AbstractColumnEntry;

@Specializes
public class NlWasListenkandidaturColumnBuilder extends ListenkandidaturColumnBuilder {

  private static final long serialVersionUID = 1L;

  private AbstractColumnEntry<Kandidatur> listenkandidaturStimmzettelPositionColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturStatusColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturFamiliennameColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturInitialenColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturGeburtsdatumColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturGeschlechtColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturWohnanschriftOrtColumn;

  public NlWasListenkandidaturColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    // super-Aufruf nicht nötig...

    listenkandidaturStimmzettelPositionColumn = new NlWasKandidaturStimmzettelPositionColumn<>(getMessages(), getIcons(), getSelectedGebiet(), getEntityAufStimmzettelDaten());

    listenkandidaturStatusColumn = new NlKandidaturStatusColumn<>(getMessages(), getIcons(), getEntityAufStimmzettelDaten(), getCurrentWahlZulassungspruefung());

    listenkandidaturFamiliennameColumn = new KandidaturNameMitIconColumn<>(AbstractPersonendatenColumn.createPersonendatenFamiliennameColumn(getMessages()),
        getWaehlerBenannteKandidaturKonfiguration(), getIcons());
    listenkandidaturInitialenColumn = new NlKandidaturInitialenMitVornameColumn(getMessages(), getPersonendatenFormatter());

    listenkandidaturGeburtsdatumColumn = AbstractPersonendatenColumn.createPersonendatenGeburtsdatumColumn(getMessages());
    listenkandidaturGeschlechtColumn = AbstractPersonendatenColumn.createPersonendatenGeschlechtColumn(getMessages());

    listenkandidaturWohnanschriftOrtColumn = new EntityMitAnschriftColumns.EntityMitAnschriftOrtColumn<>(getMessages());
  }

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

    /*
     * Cf. NlWasKandidaturColumnBuilder!!!
     */

    result.add(listenkandidaturStimmzettelPositionColumn);

    result.add(listenkandidaturStatusColumn);

    result.add(listenkandidaturFamiliennameColumn);
    result.add(listenkandidaturInitialenColumn);

    result.add(listenkandidaturGeburtsdatumColumn);
    result.add(listenkandidaturGeschlechtColumn);

    result.add(listenkandidaturWohnanschriftOrtColumn);

    return result;
  }
}
