using Quartz;

namespace WebApi;

public static class Expand
{
    public static void AddScheduler(this WebApplicationBuilder builder)
    {
        builder.Services.AddQuartz(q =>
        {
            // 配置调度器
            q.SchedulerId = "EmailBillScheduler";

            // 配置邮件同步任务 - 每10分钟执行一次
            var emailJobKey = new JobKey("EmailSyncJob");
            q.AddJob<Service.Jobs.EmailSyncJob>(opts => opts.WithIdentity(emailJobKey));
            q.AddTrigger(opts => opts
                .ForJob(emailJobKey)
                .WithIdentity("EmailSyncTrigger")
                .WithCronSchedule("0 0/30 * * * ?") // 每30分钟执行
                .WithDescription("每30分钟同步一次邮件"));

            // 配置周期性账单任务 - 每天早上6点执行
            var periodicBillJobKey = new JobKey("PeriodicBillJob");
            q.AddJob<Service.Jobs.PeriodicBillJob>(opts => opts.WithIdentity(periodicBillJobKey));
            q.AddTrigger(opts => opts
                .ForJob(periodicBillJobKey)
                .WithIdentity("PeriodicBillTrigger")
                .WithCronSchedule("0 0 6 * * ?") // 每天早上6点执行
                .WithDescription("每天早上6点执行周期性账单检查"));
        });

        // 添加 Quartz Hosted Service
        builder.Services.AddQuartzHostedService(options =>
        {
            // 等待任务完成后再关闭
            options.WaitForJobsToComplete = true;
        });
    }
}