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

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

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

import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagConversationSelect;
import de.ivu.elect.business.wahlvorschlagsperson.entity.WahlvorschlagsPerson;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.presentation.person.table.AbstractPersonendatenColumn;
import de.ivu.elect.presentation.person.table.PersonendatenPersonStatusMitIconColumn;

@Named(WahlvorschlagsPersonColumnBuilder.COMPONENT_NAME)
public class WahlvorschlagsPersonColumnBuilder extends AbstractWahlvorschlagsPersonColumnBuilder {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "wahlvorschlagsPersonColumnBuilder";

  @Inject
  private transient WahlvorschlagConversationSelect wahlvorschlagSelect;

  protected AbstractPersonendatenColumn<WahlvorschlagsPerson> wahlvorschlagsPersonPersonStatusColumn;

  protected WahlvorschlagsPersonWahlvorschlagGebietColumn<WahlvorschlagsPerson> wahlvorschlagsPersonWahlvorschlagGebietColumn;

  protected WahlvorschlagsPersonTypColumn<WahlvorschlagsPerson> wahlvorschlagsPersonTypColumn;

  protected AbstractWahlvorschlagsPersonColumn<WahlvorschlagsPerson> wahlvorschlagsPersonEingangssequenznummerColumn;

  protected WahlvorschlagsPersonWahlvorschlagNameColumn<WahlvorschlagsPerson> wahlvorschlagsPersonWahlvorschlagNameColumn;

  protected WahlvorschlagsPersonKontaktdatenColumn<WahlvorschlagsPerson> wahlvorschlagsPersonWahlvorschlagsPersonKontaktdatenColumn;

  public WahlvorschlagsPersonColumnBuilder() {
    super();
  }

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

    wahlvorschlagsPersonPersonStatusColumn = new PersonendatenPersonStatusMitIconColumn<>(getMessages(), getIcons());

    wahlvorschlagsPersonWahlvorschlagGebietColumn = new WahlvorschlagsPersonWahlvorschlagGebietColumn<>(getMessages());
    wahlvorschlagsPersonWahlvorschlagNameColumn = new WahlvorschlagsPersonWahlvorschlagNameColumn<>(getMessages());

    wahlvorschlagsPersonTypColumn = new WahlvorschlagsPersonTypColumn<>(getMessages());

    wahlvorschlagsPersonEingangssequenznummerColumn = AbstractWahlvorschlagsPersonColumn.createWahlvorschlagsPersonEingangssequenznummerColumn(getMessages());

    wahlvorschlagsPersonWahlvorschlagsPersonKontaktdatenColumn = new WahlvorschlagsPersonKontaktdatenColumn<>(getMessages());
  }

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

    result.add(wahlvorschlagsPersonTypColumn);
    // Unfug hier result.add(wahlvorschlagsPersonEingangssequenznummerColumn);

    result.add(wahlvorschlagsPersonPersonStatusColumn);

    result.add(wahlvorschlagsPersonFamiliennameAnzeigeColumn);
    result.add(wahlvorschlagsPersonVornamenAnzeigeColumn);

    if (!isWahlvorschlagSelected()) {
      result.add(0, wahlvorschlagsPersonWahlvorschlagNameColumn);
      result.add(0, wahlvorschlagsPersonWahlvorschlagGebietColumn);
    }

    result.add(wahlvorschlagsPersonWahlvorschlagsPersonKontaktdatenColumn);

    return result;
  }

  protected boolean isWahlvorschlagSelected() {
    return wahlvorschlagSelect.isSelected();
  }
}
