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

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

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

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.stimmeingabe.entity.ErgebniseingangErfasser;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelImportErgebniseingangErzeugenEvent;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelKopfdatum;

@Stateless
@Specializes
public class WasStimmzettelKopfdatumEdit extends StimmzettelKopfdatumEdit {

  @Inject
  private transient StimmzettelImportErgebniseingangErzeugenEvent stimmzettelImportErgebniseingangErzeugenEvent;

  public WasStimmzettelKopfdatumEdit() {
    super();
  }

  public void save(StimmzettelKopfdatum entity, ErgebniseingangErfasser erfasser, boolean eingangsherkunftIgnorieren) {
    stimmzettelImportErgebniseingangErzeugenEvent.sendChangeEvent(entity.getGebiet().getPk(), erfasser, eingangsherkunftIgnorieren, true /* ELECTKOM-884 */);

    super.save(entity);
  }

  public void delete(StimmzettelKopfdatum entity, ErgebniseingangErfasser erfasser, boolean eingangsherkunftIgnorieren) {
    stimmzettelImportErgebniseingangErzeugenEvent.sendChangeEvent(dao.attach(entity).getGebiet().getPk(), erfasser, eingangsherkunftIgnorieren, true /* ELECTKOM-884 */);

    super.delete(entity);
  }

  public void deleteSearched(List<StimmzettelKopfdatum> stimmzettelKopfdatumList, ErgebniseingangErfasser erfasser, boolean eingangsherkunftIgnorieren) {
    Set<Gebiet> gebiete = stimmzettelKopfdatumList.stream().map(stimmzettel -> dao.attach(stimmzettel).getGebiet()).collect(Collectors.toSet());

    for (Gebiet gebiet : gebiete) {
      stimmzettelImportErgebniseingangErzeugenEvent.sendChangeEvent(gebiet.getPk(), erfasser, eingangsherkunftIgnorieren, true /* ELECTKOM-884 */);
    }

    super.deleteSearched(stimmzettelKopfdatumList);
  }
}
