using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Artemis.Core.DeviceProviders;
namespace Artemis.Core.Services;
///
/// A service that allows you manage an
///
public interface IDeviceService : IArtemisService
{
///
/// Gets a read-only collection containing all enabled but suspended device providers
///
IReadOnlyCollection SuspendedDeviceProviders { get; }
///
/// Gets a read-only collection containing all enabled devices
///
IReadOnlyCollection EnabledDevices { get; }
///
/// Gets a read-only collection containing all registered devices
///
IReadOnlyCollection Devices { get; }
///
/// Identifies the device by making it blink white 5 times
///
///
void IdentifyDevice(ArtemisDevice device);
///
/// Adds the given device provider and its devices.
///
///
void AddDeviceProvider(DeviceProvider deviceProvider);
///
/// Removes the given device provider and its devices.
///
///
void RemoveDeviceProvider(DeviceProvider deviceProvider);
///
/// Applies auto-arranging logic to the surface
///
void AutoArrangeDevices();
///
/// Apples the best available to the provided
///
///
void LoadDeviceLayout(ArtemisDevice device);
///
/// Enables the provided device
///
/// The device to enable
void EnableDevice(ArtemisDevice device);
///
/// Disables the provided device
///
/// The device to disable
void DisableDevice(ArtemisDevice device);
///
/// Saves the configuration of the provided device to persistent storage
///
///
void SaveDevice(ArtemisDevice artemisDevice);
///
/// Saves the configuration of all current devices to persistent storage
///
void SaveDevices();
///
/// Suspends all active device providers
///
void SuspendDeviceProviders();
///
/// Resumes all previously active device providers
///
void ResumeDeviceProviders();
///
/// Occurs when a single device was added.
///
event EventHandler DeviceAdded;
///
/// Occurs when a single device was removed.
///
event EventHandler DeviceRemoved;
///
/// Occurs when a single device was disabled
///
event EventHandler DeviceEnabled;
///
/// Occurs when a single device was disabled.
///
event EventHandler DeviceDisabled;
///
/// Occurs when a device provider was added.
///
event EventHandler DeviceProviderAdded;
///
/// Occurs when a device provider was removed.
///
event EventHandler DeviceProviderRemoved;
///
/// Occurs when the surface has had modifications to its LED collection
///
event EventHandler LedsChanged;
}