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

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

import javax.inject.Named;

import de.ivu.elect.business.wahlbeteiligung.entity.Wahlbeteiligung;
import de.ivu.elect.business.wahlbeteiligung.entity.WahlbeteiligungAuswertungConstants;
import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

@Named(WahlbeteiligungColumnBuilder.COMPONENT_NAME)
public class WahlbeteiligungColumnBuilder extends AbstractColumnBuilder<Wahlbeteiligung> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "wahlbeteiligungColumnBuilder";

  private AbstractWahlbeteiligungColumn<Wahlbeteiligung> wahlbeteiligunWahlbeteiligungsauswertungColumn;

  private AbstractWahlbeteiligungColumn<Wahlbeteiligung> wahlbeteiligungErfasserColumn;

  private AbstractWahlbeteiligungColumn<Wahlbeteiligung> wahlbeteiligungZeitstempelColumn;

  private AbstractWahlbeteiligungColumn<Wahlbeteiligung> wahlbeteiligungAnzahlWaehlerGesamtColumn;

  private AbstractWahlbeteiligungColumn<Wahlbeteiligung> wahlbeteiligungAnzahlWaehlerMitWahlscheinColumn;

  private AbstractWahlbeteiligungColumn<Wahlbeteiligung> wahlbeteiligungWahldurchfuehrungsgebietColumn;

  public WahlbeteiligungColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    wahlbeteiligunWahlbeteiligungsauswertungColumn = new AbstractWahlbeteiligungColumn<Wahlbeteiligung>(
        "Wahlbeteiligung-Auswertung", getMessages(), WahlbeteiligungAuswertungConstants.MESSAGE_KEY_ENTITY_EINZAHL,
        ColumnType.TIMESTAMP, entity -> entity.getWahlbeteiligungAuswertung().getDatum());
    wahlbeteiligungErfasserColumn = AbstractWahlbeteiligungColumn.createWahlbeteiligungErfasserColumn(getMessages());
    wahlbeteiligungZeitstempelColumn = AbstractWahlbeteiligungColumn.createWahlbeteiligungZeitstempelColumn(getMessages());
    wahlbeteiligungAnzahlWaehlerGesamtColumn = AbstractWahlbeteiligungColumn
        .createWahlbeteiligungAnzahlWaehlerGesamtColumn(getMessages());
    wahlbeteiligungAnzahlWaehlerMitWahlscheinColumn = AbstractWahlbeteiligungColumn
        .createWahlbeteiligungAnzahlWaehlerMitWahlscheinColumn(getMessages());
    wahlbeteiligungWahldurchfuehrungsgebietColumn = AbstractWahlbeteiligungColumn
        .createWahldurchfuehrungsgebietColumn(getMessages(), ColumnType.STRING, entity -> {
          return entity.getWahldurchfuehrungsgebiet().getName();
        });
  }

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

    result.add(wahlbeteiligunWahlbeteiligungsauswertungColumn);
    result.add(wahlbeteiligungWahldurchfuehrungsgebietColumn);
    result.add(wahlbeteiligungErfasserColumn);
    result.add(wahlbeteiligungZeitstempelColumn);
    result.add(wahlbeteiligungAnzahlWaehlerGesamtColumn);
    result.add(wahlbeteiligungAnzahlWaehlerMitWahlscheinColumn);

    return result;
  }
}
