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

import java.util.Collection;
import java.util.List;
import java.util.function.BiFunction;

import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.kandidatur.boundary.AbstractListenkandidaturDAO;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;
import de.ivu.elect.business.wahlvorschlag.boundary.AbstractListeDAO;
import de.ivu.elect.business.wahlvorschlag.entity.Liste;
import de.ivu.elect.business.wahlvorschlag.entity.StelInformationen;
import de.ivu.elect.business.wahlvorschlag.entity.StelInformationenFormatter;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

public class NlGruppeListenStelColumn extends AbstractGruppeColumn<Gruppe> {

  private static final long serialVersionUID = 1L;

  public NlGruppeListenStelColumn(Messages messages, AbstractListeDAO listeDAO, EntityAufStimmzettelDaten entityAufStimmzettelDaten,
                                  AbstractListenkandidaturDAO listenkandidaturDAO) {
    super("NlGruppeListenStelColumn", messages, "gruppe.colum.liste.stel", ColumnType.STRING, gruppe -> {
      BiFunction<StelInformationen, List<Liste>, String> formatterEinzelliste = (stelInformationen, listen) -> messages.getMessageForMessageKey("liste.ohne.stel.nummer");

      BiFunction<StelInformationen, List<Liste>, String> formatterIdentischeListe = (stelInformationen, listen) -> messages.getMessageForMessageKey("liste.stel.identische.liste", listen.size());

      BiFunction<Collection<StelInformationen>, List<Liste>, String> formatterListengruppe = (einzelneStels, listen) -> {
        if (!einzelneStels.isEmpty()) {
          return messages.getMessageForMessageKey("liste.stel.listengruppe", listen.size(), einzelneStels.size());
        }

        return "";
      };

      return new StelInformationenFormatter(entityAufStimmzettelDaten, listenkandidaturDAO).formatGruppeStelListen(listeDAO.findByGruppe(gruppe), formatterEinzelliste,
          formatterIdentischeListe, formatterListengruppe);
    });
  }
}
