public async Task <PaymentResponse> ChoosePaymentHandler(Payment_Dto payment_dto)
        {
            var pendingState = await GetPaymentStatusByStatus((int)PaymentStatusEnum.PENDING);

            if (pendingState is null)
            {
                throw new NullReferenceException(nameof(pendingState));
            }

            payment_dto.Status = pendingState.Id;
            Payment PaymentModel = _mapper.Map <Payment_Dto, Payment>(payment_dto);

            switch (payment_dto.amount)
            {
            case decimal amount when payment_dto.amount <= 20:
                _logger.LogInformation("Using ICheapPaymentGateway for processing payment");
                return(await ICheapPaymentGateway(PaymentModel, 0));

            case decimal amount when payment_dto.amount > 20 && payment_dto.amount < 500:
                _logger.LogInformation("Using IExpensivePaymentGateway for processing payment");
                return(await IExpensivePaymentGateway(PaymentModel, false, 0));

            default:
                _logger.LogInformation("Using PremiumPaymentService for processing payment");
                return(await IExpensivePaymentGateway(PaymentModel, true, 0));
            }
        }