namespace adas_core.Application.Services.Interfaces;

public interface IPublisherService
{
    /// <summary>
    /// Creates a new queue with the specified name.
    /// </summary>
    /// <param name="queueName">The name of the queue to create.</param>
    /// <returns>A task that represents the asynchronous operation. The task result is <see langword="true"/> if the queue was created successfully; otherwise, <see langword="false"/>.</returns>
    Task<bool> CreateQueue(string queueName);
    /// <summary>
    /// Asynchronously sends an error message to the specified message queue.
    /// </summary>
    /// <param name="obj">The error payload or message object to be sent to the queue.</param>
    /// <param name="queueName">The name of the target message queue.</param>
    /// <returns>A task that represents the asynchronous operation, containing a boolean value that indicates whether the message was successfully sent.</returns>
    Task<bool> SendMessageError(object obj, string queueName);
    /// <summary>
    /// Asynchronously sends the specified object as a message to the named queue.
    /// </summary>
    /// <param name="obj">The object payload to serialize and publish to the queue.</param>
    /// <param name="queueName">The name of the target queue that will receive the message.</param>
    /// <returns>A task that resolves to <c>true</c> if the message was sent successfully, otherwise <c>false</c>.</returns>
    Task<bool> SendMessage(object obj, string queueName);
    /// <summary>
    /// Asynchronously sends a message to the specified message queue and returns a value indicating whether the operation succeeded.
    /// </summary>
    /// <param name="message">The message content to be sent to the queue.</param>
    /// <param name="queueName">The name of the target queue where the message will be delivered.</param>
    /// <returns>A task that represents the asynchronous operation. The task result is <c>true</c> if the message was sent successfully; otherwise, <c>false</c>.</returns>
    Task<bool> SendMessage(string message, string queueName);
}