using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassi.Dto.Common;
using gehGassiApp.Core.Interfaces.Synchronization;
using gehGassiApp.Domain.Favourites;
namespace gehGassiApp.Core.Interfaces
{
///
/// Schnittstellenbeschreibung für einen Service der die Verwaltung von Favoriten ermöglicht
///
public interface IFavouriteService : IService, ISyncPushPullService
{
///
/// Erstellen eines Favoriten
///
/// Favourite
Favourite Create();
///
/// Hinzufügen eines Favoriten
///
/// Favourite
/// Aktuelles Accesstoken
/// CancellationToken
/// Angelegter Favorit
Task AddAsync(Favourite favourite, string accessToken, CancellationToken token);
///
/// Aktualisieren eines Favoriten
///
/// Favourite
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn erfolgreich, false sonst
Task UpdateAsync(Favourite favourite, string accessToken, CancellationToken token);
///
/// Echtes Löschen eines Favoriten
///
/// Id des Favoriten
/// Id des AppBenutzers
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn erfolgreich, false sonst
Task DeleteAsync(string favouriteId, string appUserId, string accessToken, CancellationToken token);
///
/// Prüfen ob ein Objekt ein Favorit ist. Prüft nur Lokal!
///
/// Id des Objekts
/// Typ des Objekts
/// true wenn ein Favorit, false sonst
Task IsFavouriteLocalAsync(string key, string table);
///
/// Toggeln des Favoriten-Status eines Objektes.
/// Entweder wird der Favorit angelegt, oder gelöscht
///
/// Id des Objekts
/// Typ des Objekts
/// Id des AppUsers
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn erfolgreich, false sonst
Task ToggleAsync(string key, string table, string appUserId, string accessToken, CancellationToken token);
///
/// Gibt eine Liste von Favoriten für eine Objektklasse für einen Benutzer zurück
///
/// Gewünschtes Objekt
/// Aktuelle Position
/// Gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// Id des AppUsers
/// ListCommunicationResult
Task>> GetListAsync(string appUserId, string table, LocationDto location, string language, string accessToken, CancellationToken token);
}
}