using System.Text.Json; using Tiku.Application.Commerce; namespace Tiku.Infrastructure.Commerce; internal sealed class ManualPaymentProvider : IPaymentProvider { public string Provider => PaymentProviders.Manual; public Task CreatePaymentAsync( PaymentProviderAccount account, CreatePaymentProviderRequest request, CancellationToken cancellationToken = default) { var payload = JsonSerializer.SerializeToElement(new { request.OrderNo, request.AmountCents, request.Subject, Message = "manual_payment_requires_tenant_admin_confirmation" }); return Task.FromResult(new CreatePaymentProviderResult( Provider, request.Method, "pending", null, payload, payload)); } public Task ParsePaymentNotificationAsync( PaymentProviderAccount account, PaymentNotificationRequest request, CancellationToken cancellationToken = default) { throw new PaymentProviderException( "Manual payment does not accept provider notifications.", "manual_payment_notification_not_supported"); } public Task CreateRefundAsync( PaymentProviderAccount account, CreateRefundProviderRequest request, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); var payload = JsonSerializer.SerializeToElement(new { request.OrderNo, request.RefundNo, request.AmountCents, request.Reason }); return Task.FromResult(new CreateRefundProviderResult( Provider, true, $"manual-{request.RefundNo}", payload)); } }