using Library.Eaf.EquipmentCore.DataCollection.Reporting;
using Library.Eaf.EquipmentCore.SelfDescription.ElementDescription;
using System;
using System.Collections.Generic;

namespace Library.Eaf.EquipmentCore.Control
{
    public interface IEquipmentDataCollection
    {
        IVirtualParameterValuesHandler VirtualParameterValuesHandler { get; }
        ISelfDescriptionLookup SelfDescriptionLookup { get; }
        EquipmentSelfDescription SelfDescription { get; }
        IEnumerable<DataCollectionRequest> ActiveRequests { get; }
        IDataTracingHandler DataTracingHandler { get; }

        ParameterValue CreateParameterValue(EquipmentParameter parameter, object value);
        void NotifyDataTracingAvailable(bool isAvailable);
        void RegisterChangeDataCollectionHandler(ChangeDataCollectionHandler handler);
        void RegisterDataTracingHandler(IDataTracingHandler handler);
        void RegisterGetParameterValuesHandler(GetParameterValuesHandler handler);
        void RegisterSetParameterValuesHandler(SetParameterValuesHandler handler);
        void TriggerDeactivate(DataCollectionRequest deactivateRequest);
        void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable<ParameterValue> parameters);
        void TriggerEvent(EquipmentEvent equipmentEvent, IEnumerable<ParameterValue> parameters, IPackage sourcePackage);
        void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters);
        void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, IPackage sourcePackage);
        void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, string severityOverride, string descriptionOverride);
        void TriggerExceptionClear(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage);
        void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, string severityOverride, string descriptionOverride, IPackage sourcePackage);
        void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, string severityOverride, string descriptionOverride);
        void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters, IPackage sourcePackage);
        void TriggerExceptionSet(EquipmentException equipmentException, IEnumerable<ParameterValue> parameters);
        void TriggerPerformanceRestored();
        void TriggerPerformanceWarning();
        void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters);
        void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters, IPackage sourcePackage);
        void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters, DateTime equipmentTimeStamp);
    }
}