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 Systemnachrichten ermöglicht
///
public interface ISystemMessageService : IService, ISyncPushPullService
{
///
/// Gibt eine Liste der SystemNachrichten
///
/// Aktuelles Accesstoken
/// Typ des App-Users. Wird aber hier für den AppMode verwendet
/// Wie viele News sollen abgerufen werden? -1 Wenn nicht anwenden.
/// Wie viele News sollen ausgelassen werden? -1 Wenn nicht anwenden.
/// CancellationToken
/// Id des Senders
/// Liste SystemNachrichten
Task>> GetMessagesAsync(string senderId, AppUserType appUserType, int take, int skip, string accessToken, CancellationToken token);
///
/// Gibt die Anzahl der ungelesenen Systemnachrichten zurück
///
/// Typ des App-Users. Wird aber hier für den AppMode verwendet
/// Anzahl ungelesene Nachrichten
Task CountUnreadAsync(AppUserType appUserType);
///
/// Gibt die Anzahl der ungelesenen Systemnachrichten für alle Rollen zurück
///
/// Anzahl ungelesene Nachrichten
Task CountUnreadAsync();
///
/// Eine Nachricht wurde gelesen
///
///
///
Task MessageReadAsync(SystemMessage message);
///
/// Bestätigt alle Nachrichten die den Kriterien entsprechen als gelesen.
/// Kann verwendet werden wenn z.B. ein Walk geöffnet wird ohne dass eine anliegende Systemnachricht gelesen wurde
///
/// Typ des App-Users. Wird aber hier für den AppMode verwendet
/// Id des Objekts
/// Typ des Objekts
/// Task
Task MessagesReadAsync(AppUserType appUserType, string key, string table);
///
/// Entfernen von Systemnachrichten vom Server für einen AppUser und eine bestimmte Kombination aus Key und Table
///
/// Id des AppUsers
/// Typ des AppUsers
/// Key
/// Table
/// Alter als dieses Datum
/// Aktuelles Accesstoken
/// CancellationToken
/// bool
Task RemoveMessagesAsync(string appUserId, AppUserType appUserType, string key, string table, DateTimeOffset? created, string accessToken, CancellationToken token);
///
/// Löschen abgelaufener Systemnachrichten
///
/// Task
Task RemoveExpiredOrReadAsync();
///
/// Prüft ob eine Systemnachricht für eine bestimmte Kombination bereits existiert
///
/// Typ des App-Users. Wird aber hier für den AppMode verwendet
/// Id des Objekts
/// Typ des Objekts
/// Typ der Systemnachricht
/// true wenn es eine ungelesene gibt, false sonst
Task HasMessageAsync(AppUserType appUserType, string key, string table, SystemMessageType type);
///
/// Hinzufügen einer Systemnachricht lokal
///
/// Id des AppUsers
/// Typ des App-Users. Wird aber hier für den AppMode verwendet
/// Id des Objekts
/// Typ des Objekts
/// Typ der Systemnachricht
/// Ablaufdatum
/// Task
Task AddMessageAsync(string appUserId, AppUserType appUserType, string key, string table, SystemMessageType type, DateTimeOffset? expires);
///
/// Löschen aller Systemnachrichten
///
/// Task
Task DeleteAllAsync();
}
}