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

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

import javax.enterprise.inject.Specializes;

import de.ivu.elect.business.kandidatur.entity.Listenkandidatur;
import de.ivu.elect.business.kandidatur.entity.NlListenkandidatur;
import de.ivu.elect.business.wahlvorschlag.entity.Liste;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;

@Specializes
public class NlWasBasisListeColumnBuilder extends BasisListeColumnBuilder {

  private static final long serialVersionUID = 1L;

  public NlWasBasisListeColumnBuilder() {
    super();
  }

  @Override
  public void initColumns() {
    super.initColumns();
    listeKennwortColumn.setLineBreak(); // ELECT-13609

    listeStimmzettelPositionColumn = new NlWahlvorschlagStimmzettelPositionColumn<>(getMessages(), getIcons(), getSelectedGebiet(),
        getEntityAufStimmzettelDaten());

    listeAnzahlenListenkandidaturPerKandidaturStatusColumn = new ListeAnzahlenListenkandidaturPerKandidaturStatusColumn(getMessages(), getUserLocale(),
        getCurrentWahlZulassungspruefung()) {

      private static final long serialVersionUID = 1L;

      @Override // ELECTVAPP-607
      public Object getValue(Liste liste) {
        Collection<Listenkandidatur> listenkandidaturen = liste.getListenkandidaturen();

        if (isKandidaturStatusRendered()) {
          int anzahlListenkandidaturenZugelassen = 0;
          int anzahlListenkandidaturenVerstorben = 0;

          for (Listenkandidatur listenkandidatur : listenkandidaturen) {
            NlListenkandidatur nlListenkandidatur = new NlListenkandidatur(listenkandidatur);

            if (nlListenkandidatur.isZugelassen()) {
              anzahlListenkandidaturenZugelassen++;
            }

            if (nlListenkandidatur.isVerstorben()) {
              anzahlListenkandidaturenVerstorben++;
            }
          }

          return getMessage("liste.anzahlen.listenkandidatur.per.kandidatur.status.value", formatNumber(anzahlListenkandidaturenZugelassen), formatNumber(anzahlListenkandidaturenVerstorben));
        }

        return formatNumber(listenkandidaturen.size());
      }

      @Override
      public String getStyleClass() {
        return null; // ELECTVAPP-257, linksbündig anzeigen...
      }
    };
  }

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

    result.add(listeStimmzettelPositionColumn);

    // ELECT-9912 result.add(listeWahlvorschlagStatusColumn);

    result.add(listeKennwortColumn);

    result.add(listeAnzahlenListenkandidaturPerKandidaturStatusColumn);

    return result;
  }
}
