using gehGassiApp.Core.Interfaces.Synchronization;
using gehGassiApp.Domain.Messages;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassiApp.Domain.Lookup;
namespace gehGassiApp.Core.Interfaces
{
///
/// Schnittstellenbeschreibung für einen Service der die Verwaltung von Konversationen ermöglicht
///
public interface IConversationService : IService, ISyncPushPullService
{
///
/// Anlegen einer Konversation
///
/// Sender, falls online gesucht werden muss
/// Empfänger nach welcher gesucht wird
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CreateAsync(string senderId, AppUserLookup receipient, string accessToken, CancellationToken token);
///
/// Anlegen einer Konversation
///
/// Sender, falls online gesucht werden muss
/// Id des Emprängers
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CreateAsync(string senderId, string receipientId, string accessToken, CancellationToken token);
///
/// Gibt eine Liste der Konversationen zurück
///
/// Aktuelles Accesstoken
/// CancellationToken
/// Id des Senders
/// Liste Konversatinen
Task> GetConversationsAsync(string senderId, string accessToken, CancellationToken token);
///
/// Gibt eine Liste der Konversationen zurück
///
/// Filter
/// Aktuelles Accesstoken
/// CancellationToken
/// Id des Senders
/// Liste Konversatinen
Task> GetConversationsAsync(string senderId, string filter, string accessToken, CancellationToken token);
///
/// Gibt eine Konversation zurück welche ein bestimmtes Ziel hat
///
/// Sender, falls online gesucht werden muss
/// EmpfängerId nach welcher gesucht wird
/// Aktuelles Accesstoken
/// CancellationToken
///
Task GetByReceipientAsync(string senderId, string receipientId, string accessToken, CancellationToken token);
///
/// Setzen der letzten Nachricht für eine Konversation
///
/// Id der Konversation
/// Id der letzten Nachricht
/// Vorschautext der letzten Nachricht
/// Datum letztes Update
/// Task
Task SetLastMessageAsync(string conversationId, string messageId, string messagePreview, DateTimeOffset lastUpdate);
///
/// Gibt zurück ob es Konversationen mit ungelesenen nachrichten gibt
///
///
Task HasUnreadAsync();
}
}