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

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

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

        public Task StartSiteWeatherDaily() {
            _logger.LogInformation("SiteWeatherDaily");

            /*
            var jobDetails = JobBuilder
                .CreateForAsync<SiteWeatherJob>()
                .WithIdentity("SiteWeatherJobDaily")
                .WithDescription("매일 10시 모든 사이트의 날씨정보 저장")
                .Build();

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

            var jobDetails = JobBuilder
                .CreateForAsync<SiteWeatherJob>()
                .WithIdentity("SiteWeatherJobDaily")
                .WithDescription("매 시간 모든 사이트의 날씨정보 저장")
                .Build();

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


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

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

        public Task StartClearTempFileDaily() {
            _logger.LogInformation("StartClearTempFileDaily");

            var jobDetails = JobBuilder
                .CreateForAsync<ClearTempFileJob>()
                .WithIdentity("ClearTempFileJobDaily")
                .WithDescription("매일 6시 전날 임시파일 정리")
                .Build();

            var trigger = TriggerBuilder
                .Create()
                .StartNow()
                .WithCronSchedule("0 0 6 * * ?")
                .Build();

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

        public Task StartFacilityQRCodeGen() {
            _logger.LogInformation("StartFacilityQRCodeGen");

            var jobDetails = JobBuilder
                .CreateForAsync<ClearTempFileJob>()
                .WithIdentity("ClearTempFileJobDaily")
                .WithDescription("매일 6시 전날 임시파일 정리")
                .Build();

            var trigger = TriggerBuilder
                .Create()
                .StartNow()
                .WithCronSchedule("0 0 6 * * ?")
                .Build();

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

    }
}