
package de.ivu.elect.business.stimmeingabe.control.plausi;

import static java.util.stream.Collectors.groupingBy;

import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.function.Supplier;

import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahlvorschlag.boundary.AbstractWahlvorschlagDAO;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

/**
 *  on 02.05.2016.
 */
public class WahlvorschlaegeSupplier implements Supplier<Map<Gruppe, Collection<Wahlvorschlag>>> {

  private final Wahl wahl;

  private final AbstractWahlvorschlagDAO wahlvorschlagDAO;

  private Map<Gruppe, Collection<Wahlvorschlag>> wahlvorschlaege = null;

  public WahlvorschlaegeSupplier(Wahl wahl, AbstractWahlvorschlagDAO wahlvorschlagDAO) {
    this.wahl = wahl;
    this.wahlvorschlagDAO = wahlvorschlagDAO;
  }

  @Override
  public Map<Gruppe, Collection<Wahlvorschlag>> get() {
    if (wahlvorschlaege == null) {
      if (wahl == null || wahlvorschlagDAO == null) {
        return Collections.emptyMap(); // Testfälle...
      }
      Map wahlvorschlaege1 = wahlvorschlagDAO.findByWahl(wahl).stream().collect(groupingBy(Wahlvorschlag::getGruppe));
      wahlvorschlaege = wahlvorschlaege1;
    }
    return wahlvorschlaege;
  }
}
