/Software/Embedded_SW/Embedded/RemoteSystemsTempFiles/

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Core;

namespace Tango.MachineStudio.Common.Modules
{
    /// <summary>
    /// Represents a Machine Studio <see cref="IStudioModule"/> modules loading engine.
    /// </summary>
    public interface IStudioModuleLoader
    {
        /// <summary>
        /// Occurs when all modules are initialized.
        /// </summary>
        event EventHandler ModulesLoaded;

        /// <summary>
        /// Gets all loaded modules.
        /// </summary>
        SynchronizedObservableCollection<IStudioModule> AllModules { get; }

        /// <summary>
        /// Gets all the user permitted modules.
        /// </summary>
        SynchronizedObservableCollection<IStudioModule> UserModules { get; }

        /// <summary>
        /// Gets the studio module of type T if loaded.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        T GetStudioModule<T>() where T : IStudioModule;

        /// <summary>
        /// Loads all available Machine Studio modules.
        /// </summary>
        void LoadModules();
    }
}