
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> kandidaturPolitischeGruppeColumn;

  private AbstractColumnEntry<Kandidatur> kandidaturStimmzettelPositionColumn;

  private AbstractColumnEntry<Kandidatur> kandidaturStatusColumn;

  private AbstractColumnEntry<Kandidatur> kandidaturFamiliennameColumn;

  private AbstractColumnEntry<Kandidatur> kandidaturInitialenColumn;

  private AbstractColumnEntry<Kandidatur> kandidaturGeburtsdatumColumn;

  private AbstractColumnEntry<Kandidatur> kandidaturWohnanschriftOrtColumn;

  public NlWasKandidaturColumnBuilder() {
    super();
  }

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

    kandidaturPolitischeGruppeColumn = new KandidaturPolitischeGruppeColumn(getMessages());

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

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

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

    kandidaturGeburtsdatumColumn = AbstractPersonendatenColumn.createPersonendatenGeburtsdatumColumn(getMessages());

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

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

    /*
     * Cf. NlWasListenkandidaturColumnBuilder!!!
     */

    // result.add(kandidaturGebietColumn); // ELECT-10321, für Verstorbene nicht benötigt...
    result.add(kandidaturPolitischeGruppeColumn);

    // result.add(kandidaturStimmzettelPositionColumn); // ELECT-10321, für Verstorbene nicht benötigt...

    result.add(kandidaturStatusColumn);

    result.add(kandidaturFamiliennameColumn);
    result.add(kandidaturInitialenColumn);

    result.add(kandidaturGeburtsdatumColumn);

    result.add(kandidaturWohnanschriftOrtColumn);

    // result.add(kandidaturVerknuepfungColumn); // ELECT-10321, für Verstorbene nicht benötigt...

    return result;
  }
}
