using CMSMicroservice.Application.Common.Interfaces; using CMSMicroservice.Infrastructure.Services.Payment; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace CMSMicroservice.Infrastructure.Services.Payment; public class PaymentGatewayResolver : IPaymentGatewayResolver { private readonly IServiceProvider _serviceProvider; private readonly IConfiguration _configuration; public PaymentGatewayResolver(IServiceProvider serviceProvider, IConfiguration configuration) { _serviceProvider = serviceProvider; _configuration = configuration; } public IPaymentGatewayService Get(string? provider) { var key = Normalize(provider) ?? Normalize(_configuration["PaymentProvider"]) ?? "zarinpal"; return key switch { "20card" or "twentycard" => _serviceProvider.GetRequiredService(), "zarinpal" => _serviceProvider.GetRequiredService(), _ => _serviceProvider.GetRequiredService() }; } private static string? Normalize(string? value) => string.IsNullOrWhiteSpace(value) ? null : value.Trim().ToLowerInvariant(); }