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

import de.ivu.elect.business.kandidatenportal.control.WvpWahlkonfigurationAktualisierenEvent;
import de.ivu.elect.business.konfiguration.entity.CustomParameterKategorie;
import de.ivu.elect.business.wahl.control.WahlParameterGeaendertEvent;
import de.ivu.elect.business.wahl.entity.WahlParameter;
import de.ivu.elect.business.wahl.entity.WahlParameterWerte;

import javax.ejb.Stateless;
import javax.inject.Inject;
import java.util.List;

@Stateless
public class WahlParameterEdit extends AbstractWahlParameterEdit {

  @Inject
  private transient WahlParameterGeaendertEvent wahlParameterGeaendertEvent;

  @Inject
  private transient WvpWahlkonfigurationAktualisierenEvent wvpWahlkonfigurationAktualisierenEvent;

  public WahlParameterEdit() {
    super();
  }

  @Override
  public void save(WahlParameter entity) {
    sendWahlParameterChangeEvent(entity, false);
    super.save(entity);
  }

  public void save(List<WahlParameter> entities) {
    for (var entity : entities) {
      sendWahlParameterChangeEvent(entity, false);
      validate(entity);
    }
    flushToSave();
  }

  public void sendWahlParameterChangeEvent(WahlParameter entity, boolean create) {
    if (entity.hasChangedWert()) {
      var wahlParameterWerte = WahlParameterWerte.valueOf(entity.getKey());
      wahlParameterGeaendertEvent.sendWertGeaendertEvent(entity, wahlParameterWerte, entity.getWert(), create);
      if (wahlParameterWerte.getKategorie().equals(CustomParameterKategorie.WVP) && entity.getWahl() != null) {
        wvpWahlkonfigurationAktualisierenEvent.sendWvpWahlkonfigurationAktualisierenEvent(entity.getWahl().getPk());
      }
    }
  }


}
