using Hangfire;
using Hangfire.SqlServer;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Runtime.InteropServices;

namespace IRaCIS.Core.API
{
    public static class hangfireSetup
    {
        public static void AddhangfireSetup(this IServiceCollection services, IConfiguration configuration)
        {
            var hangFireConnStr = configuration.GetSection("ConnectionStrings:Hangfire").Value;

            services.AddHangfire(hangFireConfig =>
            {
                //本地window 调试 使用内存,服务器部署使用数据库,防止服务器任务调度到本地
                if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                {
                    hangFireConfig.UseInMemoryStorage();

                }
                else
                {
                    //指定存储介质
                    hangFireConfig.UseSqlServerStorage(hangFireConnStr, new SqlServerStorageOptions()
                    {
                        SchemaName = "dbo",
                        CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
                        SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
                        QueuePollInterval = TimeSpan.Zero,
                        UseRecommendedIsolationLevel = true,
                        DisableGlobalLocks = true
                    });
                }



             

                //hangFireConfig.UseTagsWithSql(); //nuget引入Hangfire.Tags.SqlServer
                //.UseHangfireHttpJob();

            });

            services.AddHangfireServer(option =>
            {
                option.Queues = new[] { "immediately_once", "default", "sys_init", "not_immediately_once" };
            });

        }
    }
}