using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Quartz;
using FMSAdmin.QuartzSchedule.Jobs;

namespace FMSAdmin.QuartzSchedule.Schedulers {
    public class AlarmLogPushScheduler {
        private readonly ILogger<AlarmLogPushScheduler> _logger;
        private readonly IScheduler _scheduler;

        public AlarmLogPushScheduler(ILogger<AlarmLogPushScheduler> logger, IScheduler scheduler) {
            _logger = logger;
            _scheduler = scheduler;
        }

        public Task Start() {
            _logger.LogInformation("AlarmLogPushScheduler Start");

            var jobDetails = JobBuilder
                .CreateForAsync<AlarmLogPushJob>()
                .WithIdentity("AlarmLogPushJob15Min")
                .WithDescription("15분 마다 경보푸시 발송 처리")
                .Build();

            var trigger = TriggerBuilder
                .Create()
                .StartNow()
                .WithCronSchedule("0 */5 * * * ?")  // 15분에 한번
                .Build();

            // [초 분 시 일 월 요일 연도]
            // */10 * * * * ?   => 10초에 한번
            // 1 * * * * ?      => 매분 1초
            // 1 0 0 * * ?      => 매일 0시 0분 1초에 실행

            var result = _scheduler.ScheduleJob(jobDetails, trigger);
            return result;
        }
    }
}