using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Core.RabbitMQBus.Common;
using Core.RabbitMQBus.EventBus;
using Core.RabbitMQBus.Extensions;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace WindowsFormsApp1
{
    static class Program
    {
        private static IRabbitMqPublisher _rabbitMqPublisher;
        /// <summary>
        ///  The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {

            Console.WriteLine("Hello World!");
            IServiceCollection services = new ServiceCollection();
            services.AddLogging();
            services.AddTransient<ILoggerFactory, LoggerFactory>();
            services.AddTransient<ITestService, TestService>();
            services.RegisterRabbitMQ(e => new RabbitMQOptions() { HostName = "124.71.132.255" }); //localhost
            services.RabbitMQRegisterSubscriber("Win", "Service");
            //��������
            IServiceProvider serviceProvider = services.BuildServiceProvider();
            // ����ConsoleLogProvider��������־��Ŀ���ƣ�CategoryName������Loggerʵ��
            //����
            _rabbitMqPublisher = serviceProvider.GetService<IRabbitMqPublisher>();
            //Publisher();

            //CreateWebHostBuilder(args).Build().Run();

            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }


        public static void mq()
        {

        }
        public static void Publisher()
        {
            for (int i = 0; i < 10000; i++)   //100000
            {
                Console.WriteLine("PublishTestCount:" + i);
                _rabbitMqPublisher.Publish("PublishTest1", "����" + i);
                _rabbitMqPublisher.Publish("PublishTest2", "����" + i);
            }
        }


    }



    public class TestService : ITestService, ISubscribe
    {
        [Subscribe(queueName: "PublishTest1")]
        public async Task<ExecuteMethodResult> Test(string message)
        {
            Thread.Sleep(10);
            Console.WriteLine(message + "PublishTest1");
            return await Task.FromResult(ExecuteMethodResult.Success());
        }

        [Subscribe(queueName: "PublishTest2")]
        public async Task<ExecuteMethodResult> Test1(string message)
        {
            Console.WriteLine(message + "PublishTest2");
            return await Task.FromResult(ExecuteMethodResult.Success());
        }
    }

    public interface ITestService
    {

    }

}