using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassiApp.Core.Interfaces.Synchronization;
using gehGassiApp.Domain.Users;
namespace gehGassiApp.Core.Interfaces
{
///
/// Schnittestellenbeschreibung für einen Service der die Verwaltung von Walker-Profilen ermöglicht
///
public interface IWalkerProfileService : IService, ISyncPushPullService
{
///
/// Gibt das aktuelle Walkerprofil zurück.
///
/// DogWalkerProfile oder null wenn nicht gefunden
Task GetAsync();
///
/// Gibt das aktuelle Walkerprofil zurück.
/// Versucht auch online - wenn lokal nicht vorhanden
///
/// Aktuelles Accesstoken
/// CancellationToken
/// Wenn true, wird in jedem Fall die Online-Abfrage verwendet
/// DogWalkerProfile oder null wenn nicht gefunden
Task GetAsync(string accessToken, CancellationToken token, bool forceOnline);
///
/// Hinzufügen oder aktualisieren eines Walkerprofils
///
/// Walker-Profil
/// AppUser
Task CreateOrUpdateAsync(DogWalkerProfile walkerProfile);
///
/// Aktualisieren eines Walker-Profils.
/// Online wird versucht. Wenn nicht möglich wird ein Delta erstellt.
///
/// Walker-Profil
/// Aktuelles Accesstoken
/// CancellationToken
/// DogWalkerProfile
Task UpdateAsync(DogWalkerProfile walkerProfile, string accessToken, CancellationToken token);
}
}