using System;
using System.Collections.Generic;
using Artemis.Core.Annotations;
using Artemis.Core.Models.Profile.DataBindings;
using Artemis.Core.Models.Profile.DataBindings.Modifiers;
using Artemis.Core.Plugins;
using Newtonsoft.Json;
namespace Artemis.Core.Services.Interfaces
{
public interface IDataBindingService : IArtemisService
{
///
/// Gets a read-only collection of all registered modifier types
///
IReadOnlyCollection RegisteredDataBindingModifierTypes { get; }
///
/// Registers a new modifier type for use in data bindings
///
/// The PluginInfo of the plugin this modifier type belongs to
/// The modifier type to register
void RegisterModifierType([NotNull] PluginInfo pluginInfo, [NotNull] DataBindingModifierType dataBindingModifierType);
///
/// Removes a modifier type so it is no longer available for use in data bindings
///
/// The modifier type to remove
void RemoveModifierType([NotNull] DataBindingModifierType dataBindingModifierType);
///
/// Returns all the data binding modifier types compatible with the provided type
///
List GetCompatibleModifierTypes(Type type);
///
/// Gets a modifier type by its plugin GUID and type name
///
/// The modifier type's plugin GUID
/// The type name of the modifier type
///
DataBindingModifierType GetModifierType(Guid modifierTypePluginGuid, string modifierType);
///
/// Logs a modifier deserialization failure
///
/// The modifier that failed to deserialize
/// The JSON exception that occurred
void LogModifierDeserializationFailure(DataBindingModifier dataBindingModifier, JsonSerializationException exception);
}
}