using Edge.Core.Processor;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace Edge.Core.UniversalApi
{
    public interface ICommunicationProvider : IDisposable
    {
        public Task<bool> RouteEventAsync(IProcessor eventSource, EventDescriptor eventDescriptor);

        /// <summary>
        /// Create API receiver(stub) for handle API calls.
        /// this method could be called multiple times due to hot-reload processors feature.
        /// </summary>
        /// <param name="processors"></param>
        /// <returns></returns>
        public Task SetupAsync(IEnumerable<IProcessor> processors);

        public IEnumerable<UniversalApiInfoDoc> GetApiDocuments();
    }
}