using System;
using System.Collections.Generic;
using System.IO;

namespace ZeroLevel.Services.Collections
{
    public interface IEverythingStorage
    {
        IEnumerable<string> Keys<T>();

        #region Generic
        bool TryAdd<T>(string key, T value);

        bool ContainsKey<T>(string key);

        bool TryRemove<T>(string key);

        void Add<T>(string key, T value);

        void AddOrUpdate<T>(string key, T value);

        void Remove<T>(string key);

        T Get<T>(string key);
        #endregion

        bool TryAdd(Type type, string key, object value);

        bool ContainsKey(Type type, string key);

        bool TryRemove(Type type, string key);

        void Add(Type type, string key, object value);

        void AddOrUpdate(Type type, string key, object value);

        void Remove(Type type, string key);

        object Get(Type type, string key);

        void Save(string path);

        void Load(string path);

        void Save(Stream stream);

        void Load(Stream stream);
    }
}