
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 NlWasKandidaturColumnBuilder extends KandidaturColumnBuilder {

  private static final long serialVersionUID = 1L;

  private AbstractColumnEntry<Kandidatur> listenkandidaturPolitischeGruppeColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturStatusColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturFamiliennameBestandteilColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturFamiliennameColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturInitialenMitVornameColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturGeburtsdatumColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturWohnanschriftOrtColumn;

  public NlWasKandidaturColumnBuilder() {
    super();
  }

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

    listenkandidaturPolitischeGruppeColumn = new KandidaturPolitischeGruppeColumn(getMessages());

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

    listenkandidaturFamiliennameBestandteilColumn = AbstractPersonendatenColumn.createPersonendatenFamiliennameBestandteilColumn(getMessages());
    listenkandidaturFamiliennameColumn = new KandidaturNameMitIconColumn<>(AbstractPersonendatenColumn.createPersonendatenFamiliennameColumn(getMessages()), getIcons());
    listenkandidaturInitialenMitVornameColumn = new NlKandidaturInitialenMitVornameColumn(getMessages(), getPersonendatenFormatter());

    listenkandidaturGeburtsdatumColumn = AbstractPersonendatenColumn.createPersonendatenGeburtsdatumColumn(getMessages());

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

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

    /*
     * Cf. NlWasListenkandidaturColumnBuilder, VerstorbeneKandidatenColumnBuilder!!!
     */

    result.add(listenkandidaturPolitischeGruppeColumn);

    result.add(listenkandidaturStatusColumn);

    // ELECTVAPP-1657, ELECTVAPP-1658
    result.add(listenkandidaturFamiliennameBestandteilColumn);
    result.add(listenkandidaturFamiliennameColumn);
    result.add(listenkandidaturInitialenMitVornameColumn);

    result.add(listenkandidaturGeburtsdatumColumn);

    result.add(listenkandidaturWohnanschriftOrtColumn);

    return result;
  }
}
