namespace HermesSocketLibrary.Requests.Callbacks
{
    public class CallbackManager : ICallbackManager where A : class
    {
        private readonly IDictionary _callbacks;
        public CallbackManager()
        {
            _callbacks = new Dictionary();
        }
        public string GenerateKeyForCallback(A callback)
        {
            string key = GenerateKey();
            _callbacks.Add(key, callback);
            return key;
        }
        public A? Get(string key)
        {
            if (_callbacks.TryGetValue(key, out var callback))
                return callback;
            return null;
        }
        public A? Take(string key)
        {
            if (_callbacks.TryGetValue(key, out var callback))
            {
                _callbacks.Remove(key);
                return callback;
            }
            return null;
        }
        private string GenerateKey()
        {
            return Guid.NewGuid().ToString("D");
        }
    }
}