using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassiApp.Domain.Vouchers;
namespace gehGassiApp.Core.Interfaces
{
///
/// Schnittstellenbeschreibung für einen Service der die Gutscheine verwalten kann
///
public interface IVoucherService
{
///
/// Validieren eines Gutschein-Codes für einen AppUser
///
/// Gutscheincode
/// Id des AppUsers
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CheckVoucherCodeAsync(string voucherCode, string appUserId, string accessToken, CancellationToken token);
///
/// Versucht einen Gutscheincode mit Hilfe eines QR-Codes zu holen
///
/// QR-Code in Text
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetVoucherCodeByQrCode(string qrCode, string accessToken, CancellationToken token);
///
/// Versucht einen Gutschein zu reservieren
///
/// Id des Gutscheins
/// Code des Gutscheins
/// Id des AppUsers
/// Id des Walks
/// Betrag - kann kleiner Gutscheinwert sein
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> ReserveVoucherAsync(string voucherId, string code, string appUserId, string walkId, decimal ammount, string accessToken, CancellationToken token);
///
/// Stornieren eines Gutscheins
///
/// Id des Gutscheins
/// Id des AppUsers
/// Id des Walks
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CancelVoucherAsync(string voucherId, string appUserId, string walkId, string accessToken, CancellationToken token);
}
}