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

import java.io.Serializable;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppeimgebiet.boundary.GruppeImGebietReihenfolgeBestaetiger;
import de.ivu.elect.business.gruppeimgebiet.boundary.ReihenfolgeBestaetigenOptionFuerGebiet;
import de.ivu.elect.business.gruppeimgebiet.entity.ReihenfolgeBestaetigenOption;
import de.ivu.elect.business.konfiguration.entity.KonfigurationLoader;
import de.ivu.elect.business.konfiguration.entity.MandantKonfigurationWerte;
import de.ivu.elect.business.wahl.entity.WahlParameterLoader;
import de.ivu.elect.business.wahl.entity.WahlParameterWerte;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagDAO;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;
import de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagPK;

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class WahlvorschlagReihenfolgeBestaetigenEventService implements Serializable {
  private static final long serialVersionUID = 1L;

  private static final Logger LOG = LoggerFactory.getLogger(WahlvorschlagReihenfolgeBestaetigenEventService.class);

  @Inject
  private transient WahlvorschlagDAO wahlvorschlagDAO;

  @Inject
  private transient ReihenfolgeBestaetigenOptionFuerGebiet reihenfolgeBestaetigenOptionFuerGebiet;

  @Inject
  private transient GruppeImGebietReihenfolgeBestaetiger gruppeImGebietReihenfolgeBestaetiger;

  @Inject
  private transient KonfigurationLoader konfigurationLoader;

  @Inject
  private transient WahlParameterLoader wahlParameterLoader;

  public void reihenfolgenBestaetigen(WahlvorschlagPK wahlvorschlagPK) {
    if (wahlvorschlagPK != null) {
      Wahlvorschlag wahlvorschlag = wahlvorschlagDAO.findByPrimaryKey(wahlvorschlagPK);
      if (wahlvorschlag.getGruppeImGebiet().getVorgegebenePosition() != null) {
        if (wahlParameterLoader.resolveBooleanValue(wahlvorschlag.getWahl(), WahlParameterWerte.WAHLVORSCHLAG_REIHENFOLGE_BESTAETIGEN_NACH_SPEICHERN)) {
          Gebiet gebiet = wahlvorschlag.getGebiet();
          ReihenfolgeBestaetigenOption defaultOptionFuerGebiet = reihenfolgeBestaetigenOptionFuerGebiet.createDefaultOptionFuerGebiet(gebiet);
          if (defaultOptionFuerGebiet.isVorgegebenePositionenSetzen() /*nur wenn unterstes Wahlvorschlaggebiet*/) {
            LOG.info("Bestaetige für Untergebiete: " + defaultOptionFuerGebiet);
            gruppeImGebietReihenfolgeBestaetiger.bestaetigeVorsortierteReihenfolge(gebiet, defaultOptionFuerGebiet);
          }
        }
      }
    }
  }
}
