//
//  NameChanger.cs
//
//  Copyright (c) František Boháček. All rights reserved.
//  Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NosSmooth.Core.Client;
using NosSmooth.LocalClient;
using NosSmooth.LocalClient.Extensions;
using NosSmooth.Packets.Enums;
using NosSmooth.Packets.Enums.Chat;
using NosSmooth.Packets.Packets.Server.Chat;
namespace InterceptNameChanger
{
    /// 
    /// Main class of name changer.
    /// 
    public class NameChanger
    {
        /// 
        /// Run the name changer.
        /// 
        /// A task that may or may not have succeeded.
        public async Task RunAsync()
        {
            var provider = new ServiceCollection()
                .AddLocalClient()
                // .AddPacketResponder()
                .AddLogging
                (
                    b =>
                    {
                        b.ClearProviders();
                        b.AddConsole();
                        b.SetMinimumLevel(LogLevel.Debug);
                    }
                )
                .Configure(o => o.AllowIntercept = true)
                .AddSingleton()
                .BuildServiceProvider();
            var logger = provider.GetRequiredService>();
            logger.LogInformation("Hello world from NameChanger!");
            var client = provider.GetRequiredService();
            var sayResult = await client.ReceivePacketAsync
            (
                new SayPacket
                    (EntityType.Map, 1, SayColor.Red, "The name may be changed by typing #{NewName} into the chat.")
            );
            if (!sayResult.IsSuccess)
            {
                logger.LogError("Could not send say packet");
            }
            await client.RunAsync();
        }
    }
}