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

import java.util.List;
import java.util.stream.Collectors;

import javax.inject.Inject;

import de.ivu.elect.business.ergebnis.control.StimmenImportContext;
import de.ivu.elect.business.ergebnis.entity.Ergebnisart;
import de.ivu.elect.business.ergebnis.entity.Stimmen;
import de.ivu.elect.jee.exchange.Violations;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.gruppeimgebiet.control.GruppeImGebietGruppenGebieteValidator;
import de.ivu.elect.business.gruppeimgebiet.control.GruppeImGebietStimmenWahlvorschlagValidator;
import de.ivu.elect.business.wahl.boundary.WahlDAO;
import de.ivu.elect.business.wahl.entity.Wahl;

public class StimmenImportValidator {

  @Inject
  private GruppeImGebietGruppenGebieteValidator gruppeImGebietGruppenGebieteValidator;

  @Inject
  private GruppeImGebietStimmenWahlvorschlagValidator gruppeImGebietStimmenWahlvorschlagValidator;

  @Inject
  private WahlDAO wahlDAO;

  public void validiere(Violations violations, List<Stimmen> importObject, StimmenImportContext context) {

    Wahl wahl = wahlDAO.attach(context.getWahl());

    List<Gruppe> gruppen = importObject.stream().map(Stimmen::getGruppe).collect(Collectors.toList());
    List<Gebiet> gebiete = importObject.stream().map(Stimmen::getGebiet).collect(Collectors.toList());
    gruppeImGebietGruppenGebieteValidator.pruefeExistenzAlleGruppenUndGebiete(gruppen, gebiete, wahl, violations);

    if (Ergebnisart.ENDGUELTIG.equals(context.getZiel())) {
      gruppeImGebietStimmenWahlvorschlagValidator.pruefeExistenzWahlvorschlagZugelassenOderUnbestimmt(violations,
          importObject, wahl);
    }
  }

}
