package de.ivu.elect.business.stimmeingabe.control.replikation;

import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;

import javax.ejb.DependsOn;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;

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

import de.ivu.elect.business.mandant.entity.MandantPK;
import de.ivu.elect.business.system.control.AbstractElectMandantBackgroundService;
import de.ivu.elect.business.system.entity.SystemLogQuelle;

@Startup
@Singleton
@DependsOn("DbInit")
//https://issues.jboss.org/browse/EJBTHREE-2070 (keine Transaktion)
@TransactionManagement(TransactionManagementType.BEAN)
public class StimmeingabeImportierenBackgroundService extends AbstractElectMandantBackgroundService {

  public static final AtomicLong RUNNING = createRunning();

  public static final AtomicBoolean DISABLED = createDisabled();

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

  @Inject
  private transient Instance<StimmeingabeAutomatischImportieren> stimmeingabeAutomatischImportierenInstances;

  @Override
  protected AtomicBoolean getDisabledInternal() {
    return DISABLED;
  }

  @Override
  protected boolean isSomethingToDoInternal(MandantPK mandantPK) {
    for (StimmeingabeAutomatischImportieren stimmeingabeAutomatischImportierenInstance : stimmeingabeAutomatischImportierenInstances) {
      if (stimmeingabeAutomatischImportierenInstance.isEtwasZuImportieren(getMandant(mandantPK))) {
        return true;
      }
    }
    return false;
  }

  @Override
  protected void doSomethingInternal(MandantPK mandantPK) {
    for (StimmeingabeAutomatischImportieren stimmeingabeAutomatischImportierenInstance : stimmeingabeAutomatischImportierenInstances) {
      long start = System.currentTimeMillis();
      LOG.info("** Starte automatischen Stimmeingabe-Import: " + stimmeingabeAutomatischImportierenInstance);
      stimmeingabeAutomatischImportierenInstance.importiere(getMandant(mandantPK));
      LOG.info(
          "** Ende automatischer Stimmeingabe-Import: " + stimmeingabeAutomatischImportierenInstance + ", Dauer in ms: " + (System.currentTimeMillis() - start));
    }
  }

  @Override
  public SystemLogQuelle getSystemLogQuelle() {
    return SystemLogQuelle.STIMMEINGABE_DATEIEN_IMPORTER;
  }

  @Override
  protected AtomicLong getRunning() {
    return RUNNING;
  }
}
