using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GreenTree.Nachtragsmanagement.Core.Plugins
{
///
/// Plugin finder
///
public interface IPluginFinder
{
///
/// Gets plugin groups
///
/// Plugins groups
IEnumerable GetPluginGroups();
///
/// Gets plugins
///
/// The type of plugins to get.
/// Load plugins mode
/// Load records allowed only in a specified store; pass 0 to load all records
/// Filter by plugin group; pass null to load all records
/// Plugins
IEnumerable GetPlugins(LoadPluginsMode loadMode = LoadPluginsMode.InstalledOnly,
int storeId = 0, string group = null) where T : class, IPlugin;
///
/// Get plugin descriptors
///
/// Load plugins mode
/// Load records allowed only in a specified store; pass 0 to load all records
/// Filter by plugin group; pass null to load all records
/// Plugin descriptors
IEnumerable GetPluginDescriptors(LoadPluginsMode loadMode = LoadPluginsMode.InstalledOnly,
int storeId = 0, string group = null);
///
/// Get plugin descriptors
///
/// The type of plugin to get.
/// Load plugins mode
/// Load records allowed only in a specified store; pass 0 to load all records
/// Filter by plugin group; pass null to load all records
/// Plugin descriptors
IEnumerable GetPluginDescriptors(LoadPluginsMode loadMode = LoadPluginsMode.InstalledOnly,
int storeId = 0, string group = null) where T : class, IPlugin;
///
/// Get a plugin descriptor by its system name
///
/// Plugin system name
/// Load plugins mode
/// >Plugin descriptor
PluginDescriptor GetPluginDescriptorBySystemName(string systemName, LoadPluginsMode loadMode = LoadPluginsMode.InstalledOnly);
///
/// Get a plugin descriptor by its system name
///
/// The type of plugin to get.
/// Plugin system name
/// Load plugins mode
/// >Plugin descriptor
PluginDescriptor GetPluginDescriptorBySystemName(string systemName, LoadPluginsMode loadMode = LoadPluginsMode.InstalledOnly)
where T : class, IPlugin;
///
/// Reload plugins
///
void ReloadPlugins();
}
}