using Binance.Net.Clients;
using Binance.Net.Objects;
using CryptoExchange.Net.Authentication;
using Microsoft.Extensions.Caching.Memory;
using System;
using Yitter.IdGenerator;

namespace Binance.TradeRobot.Business
{
    public class BaseBusiness
    {
        protected IFreeSql fsql;
        protected NLogManager logManager;
        protected IIdGenerator idGenerator;
        protected IMemoryCache memoryCache;
        private TimeSpan expirationTimeSpan;


        public BaseBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IMemoryCache memoryCache)
        {
            this.fsql = fsql;
            this.logManager = logManager;
            this.idGenerator = idGenerator;
            expirationTimeSpan = TimeSpan.FromDays(1);
        }

        protected BinanceClient GetBinanceClient(string apiKey, string secret)
        {
            if (!memoryCache.TryGetValue(apiKey, out BinanceClient binanceClient))
            {
                var apiClientOption = new BinanceApiClientOptions()
                {
                    BaseAddress = "https://fapi.binance.com",
                    ApiCredentials = new ApiCredentials(apiKey, secret)
                };
                binanceClient = new BinanceClient(new BinanceClientOptions()
                {
                    UsdFuturesApiOptions = apiClientOption,
                    SpotApiOptions = apiClientOption
                });
                memoryCache.Set(apiKey, binanceClient, expirationTimeSpan);
            }
            return binanceClient;
        }
    }
}