using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Extensions.Logging;
using Quartz;
using Quartz.Impl;
using Quartz.Impl.Matchers;

namespace TopshelfStudy.NetCoreDemo
{
    public class TopshelfService
    {
        public readonly IScheduler Scheduler = new StdSchedulerFactory().GetScheduler().Result;

        public readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

        public void Start()
        {
            logger.Info("服务启动");

            //注册监听器
            Scheduler.ListenerManager.AddSchedulerListener(new CustomSchedulerListener(Scheduler));
            Scheduler.ListenerManager.AddJobListener(new CustomJobListener(), GroupMatcher<JobKey>.AnyGroup());
            Scheduler.ListenerManager.AddTriggerListener(new CustomTriggerListener());

            //添加作业
            JobKey jobKey = new JobKey("demo_job", "demo_job_group");
            TriggerKey triggerKey = new TriggerKey("demo_trigger", "demo_trigger_group");
            JobDataMap dataMape = new JobDataMap();

            IJobDetail jobDetail = JobBuilder.Create<JobDemo>()
                .SetJobData(dataMape)
                .WithIdentity(jobKey)
                .Build();

            //触发器
            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity(triggerKey)
                .StartNow()
                .WithCronSchedule("0/10 * * * * ? ")
                .Build();

            //添加到调度器
            Scheduler.ScheduleJob(jobDetail, trigger);

            //启动Scheduler
            Scheduler.Start();
        }

        public void Stop()
        {
            if (Scheduler != null && !Scheduler.IsShutdown)
            {
                Scheduler.Shutdown();
            }

            logger.Info("Quarzt.Net 后台服务已关闭");

            logger.Info("Windows 服务停止");
        }

        public void Pause()
        {

        }

        public void Continue()
        { 
        
        }
    }
}