using Binance.Net.Clients;
using Binance.Net.Enums;
using System.Threading;

namespace SDKAdapter.WebSockets.Market
{
    public class BinanceSpotMarketWebSocketClient : SpotMarketWebSocketClient
    {
        private BinanceSocketClient binanceSocketClient;
        private CancellationTokenSource cancellationTokenSource;

        public BinanceSpotMarketWebSocketClient(string symbol, NLog.ILogger logger) : base(symbol, logger)
        {
            binanceSocketClient = new BinanceSocketClient();
        }

        public override void Start()
        {
            if (IsConnected)
                return;
            IsConnected = true;
            cancellationTokenSource = new CancellationTokenSource();
            binanceSocketClient.SpotStreams.SubscribeToKlineUpdatesAsync(Symbol, KlineInterval.OneMinute, (e) =>
            {
                base.OnReceived(e.Data.Data.ClosePrice);
            }, cancellationTokenSource.Token);
        }

        public override void Stop()
        {
            if (!IsConnected)
                return;
            IsConnected = false;
            cancellationTokenSource.Cancel();
            binanceSocketClient.SpotStreams.Dispose();
            cancellationTokenSource = null;
        }
    }
}