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

import java.io.Serializable;

import javax.enterprise.event.Observes;
import javax.enterprise.event.Reception;
import javax.enterprise.event.TransactionPhase;
import javax.inject.Inject;

import de.ivu.elect.business.niederschrift.boundary.NiederschriftStatusAenderungCreateEvent;
import de.ivu.elect.business.niederschrift.entity.Niederschrift;
import de.ivu.elect.business.niederschrift.entity.NiederschriftArt;
import de.ivu.elect.business.niederschrift.entity.NiederschriftStatus;
import de.ivu.elect.business.niederschrift.entity.NiederschriftStatusAenderung;
import de.ivu.elect.business.wahllokalsystem.boundary.WahllokalsystemStatusDAO;
import de.ivu.elect.business.wahllokalsystem.entity.WahllokalsystemStatus;

public class WahllokalsystemStatusNiederschriftStatusAenderungCreateListener implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahllokalsystemStatusDAO wahllokalsystemStatusDAO;

  @Inject
  private transient WahllokalsystemAktiv wahllokalsystemAktiv;

  public WahllokalsystemStatusNiederschriftStatusAenderungCreateListener() {
    super();
  }

  public void listen(@Observes(notifyObserver = Reception.ALWAYS, during = TransactionPhase.IN_PROGRESS) NiederschriftStatusAenderungCreateEvent event) {
    if (wahllokalsystemAktiv.isAktiv()) {
      NiederschriftStatusAenderung niederschriftStatusAenderung = event.getEntity();

      if (niederschriftStatusAenderung != null) {
        NiederschriftStatus niederschriftStatus = niederschriftStatusAenderung.getStatus();

        if (niederschriftStatus != null && niederschriftStatus.isEingangWahlbehoerde()) {
          Niederschrift niederschrift = niederschriftStatusAenderung.getNiederschrift();

          if (niederschrift != null) {
            NiederschriftArt niederschriftArt = niederschrift.getNiederschriftArt();

            if (niederschriftArt != null && niederschriftArt.isNiederschrift()) {
              try {
                WahllokalsystemStatus wahllokalsystemStatus = wahllokalsystemStatusDAO.findByGebiet(niederschriftStatusAenderung.getGebiet());
                wahllokalsystemStatus.setNiederschriftEingang(niederschriftStatusAenderung.getZeitstempel());
              } catch (Exception ignored) {
              }
            }
          }
        }
      }
    }
  }
}
