
package de.ivu.elect.business.gebietsbaum.boundary;

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

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

import javax.ejb.Stateless;
import javax.enterprise.inject.Specializes;

import de.ivu.elect.business.gebietsbaum.entity.Gebietsgruppierung;
import de.ivu.elect.business.gebietsbaum.entity.GebietsgruppierungPK;
import de.ivu.elect.business.gebietsbaum.entity.NlGebietsgruppierungArt;
import de.ivu.elect.business.wahl.entity.Wahl;

@Stateless
@Specializes
public class NlWasGebietsgruppierungEdit extends GebietsgruppierungEdit {

  public NlWasGebietsgruppierungEdit() {
    super();
  }

  public void saveAll(List<Gebietsgruppierung> gebietsgruppierungen) {
    gebietsgruppierungen.forEach(this::save);
  }

  public Map<NlGebietsgruppierungArt, GebietsgruppierungPK> collectGebietsgruppierungenKorrekturenErfassungsgebiete(Wahl wahl, Collection<NlGebietsgruppierungArt> arten) {
    Map<NlGebietsgruppierungArt, GebietsgruppierungPK> result = new HashMap<>();

    Map<String, NlGebietsgruppierungArt> artPerArtName = arten.stream().collect(toMap(NlGebietsgruppierungArt::getArt, Function.identity()));

    for (Gebietsgruppierung gebietsgruppierung : dao.findByWahlAndGebietsgruppierungArten(wahl, artPerArtName.keySet())) {
      String key = gebietsgruppierung.getGebietsgruppierungArt();

      if (artPerArtName.containsKey(key)) {
        result.put(artPerArtName.get(key), gebietsgruppierung.getPk());
      }
    }

    return result;
  }
}
