
package de.ivu.elect.business.wahlrechtspruefung.control;

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

import javax.inject.Inject;

import de.ivu.elect.business.wahl.boundary.WahlDAO;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahlrechtspruefung.entity.Pruefkriterium;

public class PruefkriteriumCreate extends AbstractPruefkriteriumCreate {

  @Inject
  private transient WahlDAO wahlDAO;

  public PruefkriteriumCreate() {
    super();
  }

  public void save(Collection<Pruefkriterium> templates) {
    templates.stream().forEach(this::save);
  }

  @Override
  public void save(Pruefkriterium template) {
    template.setWahl(attach(template.getWahl()));

    super.save(template);
  }

  public Long bestimmeLetzteVergebenePosition(Wahl wahl) {
    List<Pruefkriterium> pruefkriterien = collectPruefkriterien(wahl);

    if (pruefkriterien.isEmpty()) {
      return 0L;
    }

    return pruefkriterien.get(pruefkriterien.size() - 1).getPosition();
  }

  private List<Pruefkriterium> collectPruefkriterien(Wahl wahl) {
    return dao.findByWahlOrderByPosition(attach(wahl));
  }

  private Wahl attach(Wahl template) {
    return wahlDAO.attach(template);
  }
}
