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

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

import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;

import org.apache.commons.lang3.StringUtils;

import de.ivu.elect.business.gebietsbaum.boundary.GebietSessionSelect;
import de.ivu.elect.business.stimmzettel.entity.Stimmzettel;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelMeta;
import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;
import de.ivu.elect.presentation.gebietsbaum.GebietNummerFormatter;

@Named(StimmzettelColumnBuilder.COMPONENT_NAME)
public class StimmzettelColumnBuilder extends AbstractColumnBuilder<Stimmzettel> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "stimmzettelColumnBuilder";


  @Inject
  private transient StimmzettelMeta meta;

  @Inject
  private transient GebietNummerFormatter gebietNummerFormatter;

  @Inject
  private transient GebietSessionSelect gebietSessionSelect;

  private ColumnEntry<? super Stimmzettel> wahldurchfuehrungsgebietColumn;

  protected AbstractStimmzettelColumn<Stimmzettel> stimmzettelNummerColumn;

  protected AbstractStimmzettelColumn<Stimmzettel> stimmzettelStatusColumn;

  protected AbstractStimmzettelColumn<Stimmzettel> stimmzettelErfassungszeitpunktColumn;
  protected AbstractStimmzettelColumn<Stimmzettel> stimmzettelErfasser;

  protected AbstractStimmzettelColumn<Stimmzettel> stimmzettelGueltigkeitColumn;

  protected AbstractStimmzettelColumn<Stimmzettel> stimmzettelStimmzettelTeamColumn;

  protected AbstractStimmzettelColumn<Stimmzettel> stimmzettelBemerkungColumn;

   protected AbstractStimmzettelColumn<Stimmzettel> stimmzettelVersionsnummerColumn;
  @Override
  protected void initColumns() {
    wahldurchfuehrungsgebietColumn = new StimmzettelGebietColumn<>(getMessages(), gebietNummerFormatter);

    stimmzettelNummerColumn = new StimmzettelColumn(messages);
    stimmzettelStatusColumn = AbstractStimmzettelColumn.createStimmzettelStatusColumn(getMessages());
    stimmzettelErfassungszeitpunktColumn = AbstractStimmzettelColumn.createStimmzettelErfassungszeitpunktColumn(getMessages());
    stimmzettelErfasser = AbstractStimmzettelColumn.createStimmzettelErfasserColumn(getMessages());
    stimmzettelGueltigkeitColumn = AbstractStimmzettelColumn.createStimmzettelGueltigkeitColumn(getMessages());
    stimmzettelStimmzettelTeamColumn = AbstractStimmzettelColumn.createStimmzettelStimmzettelTeamColumn(getMessages());
    stimmzettelBemerkungColumn = AbstractStimmzettelColumn.createStimmzettelBemerkungColumn(getMessages());
    stimmzettelVersionsnummerColumn = AbstractStimmzettelColumn.createStimmzettelVersionsnummerColumn(getMessages());
  }

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

    if (!isErfassungsgebiet()) {
      result.add(wahldurchfuehrungsgebietColumn);
    }
    result.add(stimmzettelStimmzettelTeamColumn);
    result.add(stimmzettelNummerColumn);
    // TODO result.add(stimmzettelStatusColumn);
    result.add(stimmzettelGueltigkeitColumn);
    result.add(stimmzettelBemerkungColumn);
    result.add(stimmzettelErfassungszeitpunktColumn);
    result.add(stimmzettelErfasser);
    result.add(stimmzettelVersionsnummerColumn);

    return result;
  }

  private boolean isErfassungsgebiet() {
    return gebietSessionSelect.isSelected() && gebietSessionSelect.getEntity().isErfassungsgebiet();
  }

}
