using PARR.Domain.Common.Rabbit;
using PARR.Domain.Settings;

namespace PARR.Core.Common.Interfaces.RabbitServices
{
    public delegate Task MqMessageHandlerDelegate(string msg);

    public interface IRabbitService : IAsyncDisposable
    {
        Task<bool> InitConsumerAsync(IMqSettings mqSettings, MqMessageHandlerDelegate messageHandler);

        /// <summary>
        /// Отправить сообщение в очередь используя список строк
        /// !!! Избавиться от этого метода, вместо него использовать со списком объектов !!!
        /// </summary>
        /// <param name="mqSettings"></param>
        /// <param name="msgList"></param>
        /// <returns></returns>
        Task<RabbitSendResult> SendAsync(IMqSettings mqSettings, string[] msgList);

        /// <summary>
        /// Отправить сообщение в очередь используя список объектов
        /// </summary>
        /// <param name="mqSettings"></param>
        /// <param name="msgObjectList"></param>
        /// <returns></returns>
        Task<RabbitSendResult> SendAsync(IMqSettings mqSettings, List<object> msgObjectList);
    }
}
