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

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

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

        public Task StartWorkToOrderAndResultEveryDay() {
            _logger.LogInformation("StartWorkToOrderEveryDay");

            var jobDetails = JobBuilder
                .CreateForAsync<WorkToOrderAndResultJob>()
                .WithIdentity("WorkToOrderJobEveryDay")
                .WithDescription("매일 0시 작업진행 처리")
                .Build();

            var trigger = TriggerBuilder
                .Create()
                .StartNow()
                .WithCronSchedule("1 0 0 * * ?")  // 매일 0시 0분 1초에 실행
                .Build();

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

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