using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassiApp.Core.Interfaces.Synchronization;
using gehGassiApp.Domain.Common;
using gehGassiApp.Domain.Messages;
namespace gehGassiApp.Core.Interfaces
{
///
/// Schnittstellenbeschreibung für einen Service der die verwaltung von Nachrichten ermöglicht
///
public interface IMessageService : IService, ISyncPushPullService
{
///
/// Gibt eine Liste der Nachrichten für eine Konversation zurück
///
/// Id der Konversation
/// Aktuelles Accesstoken
/// CancellationToken
/// Id des Senders
/// Liste Nachrichten
Task> GetMessagesAsync(string senderId, string conversationId, string accessToken, CancellationToken token);
///
/// Gibt eine Liste der Nachrichten für eine Konversation zurück
///
/// Id der Konversation
/// Wie viele News sollen abgerufen werden? -1 Wenn nicht anwenden.
/// Wie viele News sollen ausgelassen werden? -1 Wenn nicht anwenden.
/// Aktuelles Accesstoken
/// CancellationToken
/// Id des Senders
/// Liste Nachrichten
Task>> GetMessagesAsync(string senderId, string conversationId, int take, int skip, string accessToken, CancellationToken token);
///
/// Gibt eine Liste der Nachrichten für die Synchronisation zurück
///
/// Aktuelles Accesstoken
/// CancellationToken
/// Id des Senders
/// Liste Nachrichten
Task>> GetMessagesForSyncAsync(string senderId, string accessToken, CancellationToken token);
///
/// Erstellen einer Nachricht. Wird lokal gespeichert und an der Server übertragen.
/// Wenn keine Verbindung besteht, wird ein Delta erstellt
///
/// id des Senders
/// Id des Empfängers
/// Id der Konversation
/// Inhalt
/// Aktuelles Accesstoken
/// CancellationToken
/// Task
Task AddMessageAsync(string senderId, string receiverId, string conversationId, string content, string accessToken, CancellationToken token);
///
/// Setzt alle Nachrichten in einer Konversation als gelesen
///
/// Id der Konversation
/// Task
Task SetMessagesReadAsync(string conversationId);
///
/// Gibt eine Liste ungelesener Nachrichten zurück
///
/// Liste ungelesener Nachrichten
Task> GetUnreadAsync();
///
/// Gibt eine Nachricht einer Konversation zurück
///
/// Id der Konversation
/// Id der Nachricht
/// Nachricht oder null, wenn nicht gefunden
Task GetAsync(string conversationId, string messageId);
///
/// Löscht eine Nachricht.
/// Die Nachricht wird auf gelöscht gesetzt.
///
/// Id der Konversation
/// Id der Nachricht
/// True wenn wirklich gelöscht werden soll
/// True wenn erfolgreich, false sonst
Task DeleteAsync(string conversationId, string messageId, bool forceDelete = false);
}
}