using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassi.Klarna.Checkout;
namespace gehGassi.Core.Interfaces
{
///
/// Schnittstellenbeschreibung eines Service der alle benötigten Klarna-Funktionen zur Verfügung stellt
///
public interface IKlarnaService
{
///
/// Prüft ob die Klarna Credentials korrekt sind und eine Verbindung zur Api aufgenommen werden kann
///
/// Klarna Benutzername
/// Klarna Passwort
/// true wenn erfolgreich, false sonst
Task TestCredentialsAsync(string username, string password);
///
/// Erstellen einer Klarna-Order
///
/// Id der simple print Bestellung
/// Klarna Benutzername
/// Klarna Passwort
/// Redirect-Url für AGB
/// Url für Checkout
/// Bestätigungs-URL
/// URL für Push-Notifications
/// Klarna Order oder null, wenn ein Fehler aufgetreten ist
Task CreateOrderAsync(long orderId, string username, string password, string termsUrl, string checkoutUrl, string confirmationUrl, string pushUrl);
///
/// Abfragen einer Klarna-Order - Checkout API
///
/// Klarna Order ID
/// Klarna Benutzername
/// Klarna Passwort
/// Klarna Order oder null, wenn nicht gefunden
Task GetOrderAsync(string klarnaOrderId, string username, string password);
///
/// Abfragen einer Klarna-Order - OrderManagement API
///
/// Klarna Order ID
/// Klarna Benutzername
/// Klarna Passwort
/// Klarna Order oder null, wenn nicht gefunden
Task GetManagementOrderAsync(string klarnaOrderId, string username, string password);
///
/// Bestätigen einer Klarna-Order - OrderManagement API
///
/// Klarna Order ID
/// Klarna Benutzername
/// Klarna Passwort
/// Klarna Order oder null, wenn nicht gefunden
Task AcknowledgeOrderAsync(string klarnaOrderId, string username, string password);
///
/// Bestätigen des Versands einer Bestellung - OrderManagement API
///
/// Order ID
/// Klarna Benutzername
/// Klarna Passwort
/// true wenn erfolgreich, false sonst
Task CaptureOrderAsync(long orderId, string username, string password);
}
///
/// Rückgabe des Versuchs eine Order als Shipped einzutragen
///
public enum CaptureOrderResult
{
///
/// Erfolgreich
///
Success = 1,
///
/// Capture nicht erlaubt
///
CaptureNotAllowed = 20,
///
/// Der verfügbare Betrag ist 0
///
RemainingAuthorizedAmount = 21,
///
/// Bestellung nicht gefunden
///
OrderNotFound = 30,
///
/// Authorisierung gescheitert
///
AuthorizationFailed = 40,
///
/// Timeout bei der Kommunikation. Nochmal versuchen
///
Timeout = 50
}
}