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

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

import javax.inject.Named;

import de.ivu.elect.business.wahl.entity.Wahltermin;
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.table.ColorColumnEntryWrapper;

@Named(WahlterminColumnBuilder.COMPONENT_NAME)
public class WahlterminColumnBuilder extends AbstractColumnBuilder<Wahltermin> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "wahlterminColumnBuilder";

  protected AbstractWahlterminColumn<Wahltermin> wahlterminWahldatumColumn;

  protected AbstractWahlterminColumn<Wahltermin> wahlterminNummerColumn;

  protected AbstractWahlterminColumn<Wahltermin> wahlterminNameColumn;

  protected AbstractWahlterminColumn<Wahltermin> wahlterminStatusColumn;

  protected ColorColumnEntryWrapper<Wahltermin> wahlterminFarbeColumn;

  protected AbstractWahlterminColumn<Wahltermin> wahlterminEinsehenRolleNameColumn;

  public WahlterminColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    wahlterminWahldatumColumn = AbstractWahlterminColumn.createWahlterminWahldatumColumn(getMessages());

    wahlterminNummerColumn = AbstractWahlterminColumn.createWahlterminNummerColumn(getMessages());
    wahlterminNameColumn = AbstractWahlterminColumn.createWahlterminNameColumn(getMessages());
    wahlterminFarbeColumn = ColorColumnEntryWrapper.wrap(AbstractWahlterminColumn.createWahlterminFarbeColumn(getMessages()));
    wahlterminStatusColumn = AbstractWahlterminColumn.createWahlterminStatusColumn(getMessages());
    wahlterminEinsehenRolleNameColumn = AbstractWahlterminColumn.createEinsehenRolleColumn(getMessages(), ColumnType.STRING, Wahltermin::getEinsehenRolleName);
  }

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

    result.add(wahlterminFarbeColumn);
    result.add(wahlterminNameColumn);

    if (isNummerRelevant()) {
      result.add(wahlterminNummerColumn);
    }

    result.add(wahlterminWahldatumColumn);
    result.add(wahlterminStatusColumn);
    result.add(wahlterminEinsehenRolleNameColumn);

    return result;
  }

  // ELECTMUC-1374
  protected boolean isNummerRelevant() {
    return false;
  }
}
