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

import java.io.Serializable;

import javax.ejb.DependsOn;
import javax.ejb.EJB;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.inject.Inject;

import de.ivu.elect.business.mandant.entity.EntityPKMitMandant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.ivu.elect.business.CurrentCustomer;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.system.control.AbstractElectMultipleCronTimer;
import de.ivu.elect.business.system.control.AbstractElectMultipleCronTimerAsync;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlOderWahlterminPK;
import de.ivu.elect.business.wahl.entity.WahlParameterWerte;
import de.ivu.elect.business.wahl.entity.Wahltermin;


import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.VERANSTALTUNG_IMPORT_CRONTAB;

/**
 *  on 03.01.2017.
 * NICHT ALS VORLAGE VERWENDEN, IST WAHL UND WAHLTERMIN SPEZIFISCH JE NACH ANWENDUNG
 */
@Startup
@Singleton
@DependsOn("StartupSingleton")
public class VeranstaltungImportCronTimer extends AbstractElectMultipleCronTimer<WahlOderWahlterminPK> {

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

  @EJB
  VeranstaltungImportAsync veranstaltungImportAsync;

  @Inject
  CurrentCustomer currentCustomer;

  @Override
  protected Logger getLog() {
    return LOG;
  }

  @Override
  protected AbstractElectMultipleCronTimerAsync<WahlOderWahlterminPK> getAsync() {
    return veranstaltungImportAsync;
  }

  @Override
  protected WahlParameterWerte getWahlParameterWerte() {
    return VERANSTALTUNG_IMPORT_CRONTAB;
  }

  @Override
  protected Serializable createPayloadFuerWahl(Wahl wahlNotAttched) {
    return new WahlOderWahlterminPK(wahlNotAttched.getPk());
  }

  @Override
  protected Serializable createPayloadFuerWahltermin(Wahltermin wahltermin) {
    return new WahlOderWahlterminPK(wahltermin.getPk());
  }

  @Override
  protected EntityPKMitMandant bestimmeMandantAusPayload(WahlOderWahlterminPK wahlOderWahlterminPK) {
    return bestimmeMandant(wahlOderWahlterminPK);
  }

}
