using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.BL.Entities;
using Tango.PMR.Diagnostics;
namespace Tango.Integration.Operation
{
/// <summary>
/// Represents a machine event states provider used by the machine provider to notify about current machine events and errors.
/// </summary>
public interface IMachineEventsStateProvider
{
/// <summary>
/// Gets the current machine events.
/// </summary>
ReadOnlyObservableCollection<MachinesEvent> Events { get; }
/// <summary>
/// Gets or sets a value indicating whether this instance has events.
/// </summary>
bool HasEvents { get; }
/// <summary>
/// Occurs when new events are available.
/// </summary>
event EventHandler<IEnumerable<MachinesEvent>> NewEvents;
/// <summary>
/// Occurs when old events has been resolved.
/// </summary>
event EventHandler<IEnumerable<MachinesEvent>> EventsResolved;
/// <summary>
/// Occurs when a new events states has been received.
/// </summary>
event EventHandler<IEnumerable<MachinesEvent>> EventsReceived;
/// <summary>
/// Occurs when the collection of current events has changed.
/// </summary>
event EventHandler<IEnumerable<MachinesEvent>> EventsChanged;
/// <summary>
/// Applies the collection of events received from the machine operator.
/// </summary>
/// <param name="events">The events.</param>
void ApplyEvents(IEnumerable<Event> events);
/// <summary>
/// Resets the current events tracking.
/// </summary>
void Reset();
}
}