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

import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.WusFeaturesAktiviert;
import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.presentation.kandidatur.WvpListenkandidaturColumnBuilder;
import de.ivu.elect.presentation.table.AbstractColumnEntry;

public class BasisListenkandidaturColumnBuilder extends AbstractKandidaturColumnBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient BasisKandidaturColumnBuilder basisKandidaturColumnBuilder;

  @Inject
  private transient WusFeaturesAktiviert wusFeaturesAktiviert;

  @Inject
  private transient WvpListenkandidaturColumnBuilder wvpListenkandidaturColumnBuilder;

  private AbstractColumnEntry<Kandidatur> listenkandidaturErsatzkandidaturColumn;

  private AbstractColumnEntry<Kandidatur> listenkandidaturNichtzulassungsgruendeColumn;

  public BasisListenkandidaturColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    getBasisKandidaturColumnBuilder().initColumns();

    listenkandidaturErsatzkandidaturColumn = new ListenkandidaturErsatzkandidaturColumn(getMessages());

    listenkandidaturNichtzulassungsgruendeColumn = new KandidaturNichtzulassungsgruendeColumn<>(getMessages(), getEntityAufStimmzettelDaten(), getCurrentWahlZulassungspruefung());

    getWvpListenkandidaturColumnBuilder().initColumns();
  }

  @Override
  protected void addColumnEntriesGruppeGebiet(List<ColumnEntry< ? super Kandidatur>> result) {
    getBasisKandidaturColumnBuilder().addColumnEntriesGruppeGebiet(result);
  }

  @Override
  protected void addColumnEntriesStimmzetteldaten(List<ColumnEntry< ? super Kandidatur>> result) {
    getBasisKandidaturColumnBuilder().addColumnEntriesStimmzetteldaten(result);

    if (isWahlSelectedMitMehrfachnennungen()) {
      add(result, getListenkandidaturAnzahlNennungenColumn());
    }
  }

  @Override
  protected void addColumnEntriesKandidaturdaten(List<ColumnEntry< ? super Kandidatur>> result) {
    if (isWahlSelectedMitErsatzkandidaturen()) {
      add(result, getListenkandidaturErsatzkandidaturColumn());
    }

    getBasisKandidaturColumnBuilder().addColumnEntriesKandidaturdaten(result);
  }

  @Override
  protected void addColumnEntriesPersonendaten(List<ColumnEntry< ? super Kandidatur>> result) {
    getBasisKandidaturColumnBuilder().addColumnEntriesPersonendaten(result);
  }

  @Override
  protected void addColumnEntriesBeschaeftigungsdaten(List<ColumnEntry< ? super Kandidatur>> result) {
    getBasisKandidaturColumnBuilder().addColumnEntriesBeschaeftigungsdaten(result);
  }

  @Override
  protected void addColumnEntriesAnschrift(List<ColumnEntry< ? super Kandidatur>> result) {
    getBasisKandidaturColumnBuilder().addColumnEntriesAnschrift(result);
  }

  @Override
  protected void addColumnEntriesGewaehlt(List<ColumnEntry< ? super Kandidatur>> result) {
    getBasisKandidaturColumnBuilder().addColumnEntriesGewaehlt(result);
  }

  @Override
  protected void addColumnEntriesVerknuepfungen(List<ColumnEntry< ? super Kandidatur>> result) {
    getBasisKandidaturColumnBuilder().addColumnEntriesVerknuepfungen(result);
  }

  @Override
  protected void addColumnEntriesZulassungspruefung(List<ColumnEntry< ? super Kandidatur>> result) {
    if (wusFeaturesAktiviert.isWusOderWusWasZusammen()) {
      result.add(listenkandidaturNichtzulassungsgruendeColumn);// ELECT-12381, cf. BasisListeColumnBuilder#listeNichtzulassungsgruendeColumn, BasisDirektkandidaturColumnBuilder#direktkandidaturNichtzulassungsgruendeColumn!!!

      getBasisKandidaturColumnBuilder().addColumnEntriesZulassungspruefung(result);
    }

    getWvpListenkandidaturColumnBuilder().addColumns(result);
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturStimmzettelPositionColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturStimmzettelPositionColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturAnzahlNennungenColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturAnzahlNennungenColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturErsatzkandidaturColumn() {
    return listenkandidaturErsatzkandidaturColumn;
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturNameVollstaendigAnzeigeColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturNameVollstaendigAnzeigeColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturAkademischerGradColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturAkademischerGradColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturTitelColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturTitelColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturFamiliennameColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturFamiliennameColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturFamiliennameBestandteilColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturFamiliennameBestandteilColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturRufnameColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturRufnameColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturRufnameAnzeigeColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturRufnameAnzeigeColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturVornamenColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturVornamenColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturVornamenAnzeigeColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturVornamenAnzeigeColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturGeburtsdatumColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturGeburtsdatumColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturGeburtsortColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturGeburtsortColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturGeschlechtColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturGeschlechtColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturStaatsangehoerigkeitColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturStaatsangehoerigkeitColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturBerufColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturBerufColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturBerufUnformatiertColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturBerufUnformatiertColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturBerufsschluesselColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturBerufsschluesselColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturEhrenamtColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturEhrenamtColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturKuenstlernameOrdensnameColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturKuenstlernameOrdensnameColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturZusammengestezteAnschriftColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturZusammengestezteAnschriftColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturStrasseColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturStrasseColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturHausnummerColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturHausnummerColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturHausnummerzusatzColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturHausnummerzusatzColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturWohnungsnummerColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturWohnungsnummerColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturPlzColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturPlzColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturWohnortColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturWohnortColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturOrtsteilColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturOrtsteilColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturZustellanweisungColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturZustellanweisungColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturGewaehltVorperiodeColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturGewaehltVorperiodeColumn();
  }

  protected AbstractColumnEntry<Kandidatur> getListenkandidaturVerknuepfungColumn() {
    return getBasisKandidaturColumnBuilder().getKandidaturVerknuepfungColumn();
  }

  protected BasisKandidaturColumnBuilder getBasisKandidaturColumnBuilder() {
    return basisKandidaturColumnBuilder;
  }

  protected WvpListenkandidaturColumnBuilder getWvpListenkandidaturColumnBuilder() {
    return wvpListenkandidaturColumnBuilder;
  }
}
