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

import java.io.Serializable;

import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.inject.Inject;

import de.ivu.elect.business.mandant.boundary.MandantDAO;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.wahl.boundary.WahlDAO;
import de.ivu.elect.business.wahl.boundary.WahlterminDAO;
import de.ivu.elect.business.wahl.entity.WahlOderWahltermin;
import de.ivu.elect.business.wahl.entity.WahlOderWahlterminPK;
import de.ivu.elect.business.wahl.entity.Wahltermin;

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class PruefkennzeichenAutomatischGenerierenNewTransaction implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlterminDAO wahlterminDAO;

  @Inject
  private transient WahlDAO wahlDAO;

  @Inject
  private transient MandantDAO mandantDAO;

  @Inject
  private transient PruefkennzeichenAutomatischGenerierenEvent pruefkennzeichenAutomatischGenerierenEvent;

  @Inject
  private transient PruefkennzeichenAutomatischGenerierenHelper pruefkennzeichenAutomatischGenerierenHelper;

  public void generiere(WahlOderWahlterminPK wahlOderWahlterminPK) {
    if (wahlOderWahlterminPK != null) {
      WahlOderWahltermin wahlOderWahltermin = wahlOderWahlterminPK.getWahlOderWahltermin(wahlterminDAO, wahlDAO);
      Wahltermin wahltermin;
      if (wahlOderWahltermin.isInstanceOfWahl()) {
        wahltermin = wahlOderWahltermin.getWahlIfWahl().getWahltermin();
      } else {
        wahltermin = wahlOderWahltermin.getWahlterminIfWahltermin();
      }

      pruefkennzeichenAutomatischGenerierenHelper.generiere(wahltermin);
    }
  }

  public void sendeEventFuerAlleWahltermine() {
    for (Mandant mandant : mandantDAO.findByAll()) {
      for (Wahltermin wahltermin : wahlterminDAO.findByAll(mandant)) {
        pruefkennzeichenAutomatischGenerierenEvent.sendEvent(wahltermin);
      }
    }
  }

}
