using gehGassiApp.Core.Interfaces.Synchronization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassi.Dto.Common;
using gehGassiApp.Domain.Common;
using gehGassiApp.Domain.Walks;
namespace gehGassiApp.Core.Interfaces
{
///
/// Schnittsstellenbeschreibung eines Service der die Verwaltung von Antworten auf öffentlichen Anfragen ermöglicht
///
public interface IPublicWalkResponseService : IService, ISyncPushPullService
{
///
/// Gibt eine Liste von Antworten zu einer öffentlichen Anfragen zurück
///
/// Id der öffentlichen Anfrage
/// Aktuelle Position
/// Wie viele Listungen sollen abgerufen werden? -1 Wenn nicht anwenden.
/// Wie viele Listungen sollen ausgelassen werden? -1 Wenn nicht anwenden.
/// Akteuller Modus der App
/// Gewählte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetListAsync(string publicWalkRequestId, LocationDto location, int take, int skip, AppMode appMode, string language, string accessToken, CancellationToken token);
///
/// Holen einer Antworten zu öffentlichen Anfragen
///
/// Id der öffentlichen Anfrage
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task GetAsync(string publicWalkResponseId, string accessToken, CancellationToken token);
///
/// Holen einer Antworten zu öffentlichen Anfragen
///
/// Id der öffentlichen Anfrage
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task GetWithNamesAsync(string publicWalkResponseId, string accessToken, CancellationToken token);
///
/// Holen einer Antworten zu öffentlichen Anfragen
///
/// Id des AppUsers
/// Id der öffentlichen Anfrage
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task GetForWalkerAsync(string appUserId, string publicWalkRequestId, string accessToken, CancellationToken token);
///
/// Hinzufügen einer Antwort zu einer öffentlichen Anfrage
///
/// Antwort zur Öffentliche Anfrage
/// Aktuelles Accesstoken
/// CancellationToken
/// PublicWalkRequest
Task> AddAsync(PublicWalkResponse response, string accessToken, CancellationToken token);
///
/// Prüft in der lokalen DB ob ein Walker für eine öffentliche Anfrage ein Angebot abgegeben hat
///
/// Id des Dogwalkers
/// Id der öffentlichen Anfrage
/// true wenn es ein Angebot gibt, false sonst
Task HasResponseAsync(string appUserId, string publicWalkRequestId);
///
/// Aktualisieren einer Antwort zu einer öffentlichen Anfrage
///
/// Antwort zur Öffentliche Anfrage
/// Soll der Status aktualisiert werden?
/// Aktuelles Accesstoken
/// CancellationToken
/// PublicWalkRequest
Task UpdateAsync(PublicWalkResponse response, bool updateStatus, string accessToken, CancellationToken token);
///
/// Ablehnen eines Angebotes zu einer öffentlichen Anfrage
///
/// Id der Antwort
/// Id der öffentlichen Anfrage
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn erfolgreich, false sonst
Task DeclineAsync(string responseId, string publicWalkRequestId, string accessToken, CancellationToken token);
///
/// Bearbeiten eines bereits gestellten Angebotes zu einer öffentlichen Anfrage
///
/// Id der Antwort
/// Id der öffentlichen Anfrage
/// Neuer Preis
/// Info zum Angebot
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn erfolgreich, false sonst
Task> EditAsync(string responseId, string publicWalkRequestId, decimal price, string info, string accessToken, CancellationToken token);
///
/// Bearbeiten eines bereits gestellten Angebotes zu einer öffentlichen Anfrage
///
/// Id der Antwort
/// Id der öffentlichen Anfrage
/// Grund für die Stornierung
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn erfolgreich, false sonst
Task> CancelAsync(string responseId, string publicWalkRequestId, string cancellationReason, string accessToken, CancellationToken token);
}
}