package org.ei.drishti.scheduler;
import org.joda.time.DateTime;
import org.motechproject.scheduler.MotechSchedulerService;
import org.motechproject.scheduler.domain.MotechEvent;
import org.motechproject.scheduler.domain.RepeatingSchedulableJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import static org.joda.time.DateTimeConstants.MILLIS_PER_HOUR;
import static org.joda.time.DateTimeConstants.MILLIS_PER_MINUTE;
@Component
public class MCTSReportScheduler {
public static final String SUBJECT = "MCTS-REPORT-SCHEDULE";
private static final int START_DELAY = 10;
private final MotechSchedulerService schedulerService;
private static Logger logger = LoggerFactory.getLogger(MCTSReportScheduler.class.toString());
private long pollIntervalInHours;
private long pollIntervalInMinutes;
@Autowired
public MCTSReportScheduler(MotechSchedulerService schedulerService,
@Value("#{drishti['mcts.poll.time.interval.in.hours']}") Long pollIntervalInHours,
@Value("#{drishti['mcts.poll.time.interval.in.minutes']}") Long pollIntervalInMinutes) {
this.schedulerService = schedulerService;
this.pollIntervalInHours = pollIntervalInHours;
this.pollIntervalInMinutes = pollIntervalInMinutes;
}
public void startTimedScheduler() {
logger.info("Scheduling SMS to fetch ...");
Date startTime = DateTime.now().plusMinutes(START_DELAY).toDate();
MotechEvent event = new MotechEvent(SUBJECT, new HashMap<String, Object>());
long repeatIntervalInMilliSeconds = (pollIntervalInHours * MILLIS_PER_HOUR) + (pollIntervalInMinutes * MILLIS_PER_MINUTE);
RepeatingSchedulableJob job = new RepeatingSchedulableJob(event, startTime, null, repeatIntervalInMilliSeconds);
schedulerService.safeScheduleRepeatingJob(job);
}
}