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

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

import de.ivu.elect.business.ergebnis.boundary.ErgebnisDAO;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.gebietsbaum.boundary.WahldurchfuehrungsgebietDAO;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.stimmeingabe.boundary.ErgebniseingangDAO;
import de.ivu.elect.business.wahl.entity.Wahl;

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
// ELECTVAPP-1210
public class NlWasDeleteHelper {

  private static final int GEBIETE_PRO_TRANSAKTION = 15;

  @Inject
  private transient WahlDAO wahlDAO;

  @Inject
  private transient ErgebniseingangDAO ergebniseingangDAO;

  @Inject
  private transient ErgebnisDAO ergebnisDAO;

  @Inject
  private transient WahldurchfuehrungsgebietDAO wahldurchfuehrungsgebietDAO;

  public boolean deleteErgebniseingaengeNachGebiet(Wahl wahNotAttched) {
    int deleteCount = 0;
    for (Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet : wahldurchfuehrungsgebietDAO.findByWahl(wahlDAO.attach(wahNotAttched))) {
      if (ergebniseingangDAO.deleteByGebiet(wahldurchfuehrungsgebiet) > 0) {
        deleteCount++;
        if (deleteCount > GEBIETE_PRO_TRANSAKTION) {
          return true;
        }
      }
    }
    return deleteCount > 0;
  }

  public void deleteErgebniseingaenge(Wahl wahlNotAttched) {
    ergebniseingangDAO.deleteByWahl(wahlDAO.attach(wahlNotAttched));
  }

  public void deleteErgebnisse(Wahl wahlNotAttched) {
    for (Ergebnis ergebnis : ergebnisDAO.findByWahl(wahlDAO.attach(wahlNotAttched))) {
      ergebnisDAO.remove(ergebnis);
    }

  }

}
