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

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

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

import de.ivu.elect.business.gebietsbaum.boundary.WahldurchfuehrungsgebietSessionSelect;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.stimmen.boundary.StimmenartLabelGenerator;
import de.ivu.elect.business.wahlvorschlag.entity.ReferendumOptionKumulierteStimmen;
import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;

@Named(ReferendumOptionKumulierteStimmenColumnBuilder.COMPONENT_NAME)
public class ReferendumOptionKumulierteStimmenColumnBuilder extends AbstractColumnBuilder<ReferendumOptionKumulierteStimmen> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "referendumOptionKumulierteStimmenColumnBuilder";

  @Inject
  private transient WahldurchfuehrungsgebietSessionSelect wahldurchfuehrungsgebietSessionSelect;

  @Inject
  private transient StimmenartLabelGenerator stimmenartLabelGenerator;

  private ReferendumOptionKumulierteStimmenKennungColumn referendumOptionKumulierteStimmenKennungColumn;

  private ReferendumOptionKumulierteStimmenReferendumVorlageNameColumn referendumOptionKumulierteStimmenReferendumVorlageNameColumn;

  private ReferendumOptionKumulierteStimmenBezeichnungColumn referendumOptionKumulierteStimmenBezeichnungColumn;

  private ReferendumOptionKumulierteStimmenAnzahlColumn referendumOptionKumulierteStimmenAnzahlColumn;

  public ReferendumOptionKumulierteStimmenColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    referendumOptionKumulierteStimmenKennungColumn = new ReferendumOptionKumulierteStimmenKennungColumn(getMessages());
    referendumOptionKumulierteStimmenReferendumVorlageNameColumn = new ReferendumOptionKumulierteStimmenReferendumVorlageNameColumn(getMessages());
    referendumOptionKumulierteStimmenBezeichnungColumn = new ReferendumOptionKumulierteStimmenBezeichnungColumn(getMessages());

    if (isGebietSelected()) {
      referendumOptionKumulierteStimmenAnzahlColumn = new ReferendumOptionKumulierteStimmenAnzahlColumn(getSelectedGebiet(), getMessages(), stimmenartLabelGenerator);
    }
  }

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

    result.add(referendumOptionKumulierteStimmenKennungColumn);
    result.add(referendumOptionKumulierteStimmenReferendumVorlageNameColumn);
    result.add(referendumOptionKumulierteStimmenBezeichnungColumn);

    if (isGebietSelected()) {
      result.add(referendumOptionKumulierteStimmenAnzahlColumn);
    }

    return result;
  }

  private boolean isGebietSelected() {
    return wahldurchfuehrungsgebietSessionSelect.isSelected();
  }

  private Wahldurchfuehrungsgebiet getSelectedGebiet() {
    return wahldurchfuehrungsgebietSessionSelect.getEntity();
  }
}
