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.Common;
namespace gehGassiApp.Core.Interfaces
{
///
/// Schnittstellenbeschreibung für einen Service der die Verwaltung von Ratings ermöglicht
///
public interface IRatingService : IService, ISyncPushPullService
{
///
/// Erstellen eines Ratings
///
///
Rating Create();
///
/// Gibt ein Rating basierend auf Abfragekriterien zurück
///
/// Id des Bewerters
/// Typ des Bewertes
/// Id des Bewertungsziels
/// Typ des Bewertungsziels
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn bereits bewertet, false sonst
Task GetRatingEx(string fromId, AppUserType fromType, string targetId, RatingTarget targetType, string accessToken, CancellationToken token);
///
/// Gibt ein Rating basierend auf der ID zurück
///
/// Id des Ratings
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task GetRatingAsync(string ratingId, string accessToken, CancellationToken token);
///
/// Hinzufügen eines Ratings
///
/// Rating
/// Aktuelles Accesstoken
/// CancellationToken
/// Angelegtes Rating
Task AddAsync(Rating rating, string accessToken, CancellationToken token);
///
/// Aktualisieren eines Ratings
///
/// Rating
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn erfolgreich, false sonst
Task UpdateAsync(Rating rating, string accessToken, CancellationToken token);
///
/// Echtes Löschen eines Ratings - wird derzeit nicht verwendet!
/// Bitte Rating auf deleted setzen und UPDATE
///
/// Id des Ratings
/// Id des AppBenutzers
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn erfolgreich, false sonst
Task DeleteAsync(string ratingId, string appUserId, string accessToken, CancellationToken token);
///
/// Wurde bereits eine Bewertung vorgenommen?
///
/// Id des Bewerters
/// Typ des Bewertes
/// Id des Bewertungsziels
/// Typ des Bewertungsziels
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn bereits bewertet, false sonst
Task HasRatedAsync(string fromId, AppUserType fromType, string targetId, RatingTarget targetType, string accessToken, CancellationToken token);
///
/// Kann eine Bewertung vorgenommen werden?
///
/// Id des Bewerters
/// Typ des Bewertes
/// Id des Bewertungsziels
/// Typ des Bewertungsziels
/// Aktuelles Accesstoken
/// CancellationToken
/// true wennmöglich, false sonst
Task CanRateAsync(string fromId, AppUserType fromType, string targetId, RatingTarget targetType, string accessToken, CancellationToken token);
///
/// Abrufen einer Liste von Ratings
///
/// Quelle Id
/// Quelle Typ
/// Ziel Id
/// Ziel Typ
/// Liste von Sortierangaben
/// Gewünschte Sprache
/// Aktueller appMode
/// Aktuelle Position
/// Wie viele Walks sollen abgerufen werden? -1 Wenn nicht anwenden.
/// Wie viele Walks sollen ausgelassen werden? -1 Wenn nicht anwenden.
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetRatingsAsync(string fromId, AppUserType? fromType, string targetId, RatingTarget? targetType, List sortOrders, string language, AppMode appMode, LocationDto locaton, int take, int skip, string accessToken, CancellationToken token);
}
}