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

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

import javax.enterprise.inject.Specializes;

import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlOderWahltermin;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;


import static de.ivu.elect.jee.presentation.dynamictable.ColumnType.STRING;

@Specializes
public class CommonWahlColumnBuilder extends BasisWahlColumnBuilder {

  private static final long serialVersionUID = 1L;

  protected AbstractWahlColumn<Wahl> wahlEinsehenRolle;

  protected AbstractWahlColumn<Wahl> wahlStatusColumn;

  protected AbstractWahlColumn<Wahl> wahlWahlterminColumn;

  protected AbstractWahlColumn<Wahl> wahlWahlterminnummerColumn;

  protected AbstractWahlColumn<Wahl> wahlQuorumColumn;

  public CommonWahlColumnBuilder() {
    super();
  }

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

    wahlEinsehenRolle = AbstractWahlColumn.createEinsehenRolleColumn(messages, STRING, WahlOderWahltermin::getEinsehenRolleName);
    wahlStatusColumn = AbstractWahlColumn.createWahlStatusColumn(messages);
    wahlWahlterminColumn = new WahlWahlterminColumn(messages);
    wahlWahlterminnummerColumn = new WahlWahlterminnummerColumn(messages);
    wahlQuorumColumn = AbstractWahlColumn.createWahlQuorumProzenthuerdeColumn(messages);
  }

  @Override
  public List<ColumnEntry< ? super Wahl>> getColumnEntriesSorted() {
    List<ColumnEntry< ? super Wahl>> result = new ArrayList<>(super.getColumnEntriesSorted());

    result.add(result.indexOf(wahlNameColumn), wahlWahlterminColumn);
    result.add(result.indexOf(wahlWahlterminColumn) + 1, wahlWahlterminnummerColumn);
    result.add(wahlEinsehenRolle);
    result.add(wahlStatusColumn);
    result.add(wahlQuorumColumn);

    return result;
  }
}
