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

import java.util.Collection;

import javax.annotation.Nullable;
import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import de.ivu.elect.business.ergebnis.entity.Eml510ExportEvent;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.ergebnis.entity.Stimmen;
import de.ivu.elect.business.stimmeingabe.entity.ErgebnisGueltigerEingang;
import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingang;

@Specializes
public class NlStimmeingabeErgebnisuebernahme extends StimmeingabeErgebnisuebernahme {

  @Inject
  private transient Eml510ExportEvent eml510ExportEvent;

  public NlStimmeingabeErgebnisuebernahme() {
    super();
  }

  @Override
  protected void processStimmenKonvertiert(Ergebnis ergebnis, Ergebniseingang ergebniseingang, Collection<Stimmen> stimmenKonvertiert) {
    super.processStimmenKonvertiert(ergebnis, ergebniseingang, stimmenKonvertiert);

    if (ergebniseingang.getStimmeingaben().stream().noneMatch(this::isBriefwahlWaehlerMitWahlschein)) {
      stimmenKonvertiert.removeIf(this::isBriefwahlWaehlerMitWahlschein); // ELECTVAPP-807
    }
  }

  @Override
  protected void updateOrPersistErgebnisGueltigerEingang(Ergebnis ergebnis, @Nullable ErgebnisGueltigerEingang ergebnisGueltigeEingaengeReplaced, Ergebniseingang ergebniseingang) {
    super.updateOrPersistErgebnisGueltigerEingang(ergebnis, ergebnisGueltigeEingaengeReplaced, ergebniseingang);

    eml510ExportEvent.fire(ergebniseingang.getGebiet().getPk());
  }
}
