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); }