using System.Text.Json.Nodes;
using Csob.Client;
using Csob.Models;
namespace Csob.Services;
/// PISP – single payment initiation, status/detail, cancellation and the sign (SCA) flow.
public sealed class PaymentsService
{
private readonly CsobApiAccessor _accessor;
public PaymentsService(CsobApiAccessor accessor) => _accessor = accessor;
public Task InitiateAsync(PaymentInitiationRequest request, CancellationToken ct)
=> _accessor.Client.PostAsync(CsobApiPaths.Payments, request, ct);
public Task DetailAsync(string id, CancellationToken ct)
=> _accessor.Client.GetAsync(CsobApiPaths.Payment(id), null, ct);
public Task StatusAsync(string id, CancellationToken ct)
=> _accessor.Client.GetAsync(CsobApiPaths.PaymentStatus(id), null, ct);
public Task CancelAsync(string id, CancellationToken ct)
=> _accessor.Client.DeleteAsync(CsobApiPaths.Payment(id), ct);
/// Starts transaction authorization (SCA). Returns the redirect details for the PSU.
public Task StartSignAsync(string id, string signId, JsonNode? body, CancellationToken ct)
=> _accessor.Client.PostAsync(CsobApiPaths.PaymentSign(id, signId), body, ct);
/// Gets the current state of an authorization (sign) transaction.
public Task SignStatusAsync(string id, string signId, CancellationToken ct)
=> _accessor.Client.GetAsync(CsobApiPaths.PaymentSign(id, signId), null, ct);
/// Finalizes an authorization (sign) transaction.
public Task FinalizeSignAsync(string id, string signId, JsonNode? body, CancellationToken ct)
=> _accessor.Client.PutAsync(CsobApiPaths.PaymentSign(id, signId), body, ct);
}