/home/brandsfa/www/app/Traits/Payment.php
<?php

namespace App\Traits;

use App\Models\PaymentRequest;
use InvalidArgumentException;

trait Payment
{
    public static function generate_link(object $payer, object $payment_info, Object $receiver)
    {
        if ($payment_info->getPaymentAmount() === 0) {
            throw new InvalidArgumentException('Payment amount can not be 0');
        }

        if (!in_array(strtoupper($payment_info->getCurrencyCode()), array_column(GATEWAYS_CURRENCIES, 'code'))) {
            throw new InvalidArgumentException('Need a valid currency code');
        }

        if (!in_array($payment_info->getPaymentMethod(), array_column(GATEWAYS_PAYMENT_METHODS, 'key'))) {
            throw new InvalidArgumentException('Need a valid payment gateway');
        }

        if (!is_array($payment_info->getAdditionalData())) {
            throw new InvalidArgumentException('Additional data should be in a valid array');
        }

        $payment = new PaymentRequest();
        $payment->payment_amount = $payment_info->getPaymentAmount();
        $payment->success_hook = $payment_info->getSuccessHook();
        $payment->failure_hook = $payment_info->getFailureHook();
        $payment->payer_id = $payment_info->getPayerId();
        $payment->receiver_id = $payment_info->getReceiverId();
        $payment->currency_code = strtoupper($payment_info->getCurrencyCode());
        $payment->payment_method = $payment_info->getPaymentMethod();
        $payment->additional_data = json_encode($payment_info->getAdditionalData());
        $payment->payer_information = json_encode($payer->information());
        $payment->receiver_information = json_encode($receiver->information());
        $payment->external_redirect_link = $payment_info->getExternalRedirectLink();
        $payment->attribute = $payment_info->getAttribute();
        $payment->attribute_id = $payment_info->getAttributeId();
        $payment->payment_platform = $payment_info->getPaymentPlatForm();
        $payment->save();

        if ($payment->payment_method == 'ssl_commerz') {
            return url("payment/sslcommerz/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'stripe'){
            return url("payment/stripe/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'paymob_accept'){
            return url("payment/paymob/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'flutterwave'){
            return url("payment/flutterwave-v3/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'paytm'){
            return url("payment/paytm/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'paypal'){
            return url("payment/paypal/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'paytabs'){
            return url("payment/paytabs/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'liqpay'){
            return url("payment/liqpay/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'razor_pay'){
            return url("payment/razor-pay/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'senang_pay'){
            return url("payment/senang-pay/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'mercadopago'){
            return url("payment/mercadopago/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'bkash'){
            return url("payment/bkash/make-payment/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'paystack'){
            return url("payment/paystack/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'fatoorah'){
            return url("payment/fatoorah/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'xendit'){
            return url("payment/xendit/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'amazon_pay'){
            return url("payment/amazon/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'iyzi_pay'){
            return url("payment/iyzipay/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'hyper_pay'){
            return url("payment/hyperpay/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'foloosi'){
            return url("payment/foloosi/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'ccavenue'){
            return url("payment/ccavenue/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'pvit'){
            return url("payment/pvit/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'moncash'){
            return url("payment/moncash/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'thawani'){
            return url("payment/thawani/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'tap'){
            return url("payment/tap/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'viva_wallet'){
            return url("payment/viva/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'hubtel'){
            return url("payment/hubtel/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'maxicash'){
            return url("payment/maxicash/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'esewa'){
            return url("payment/esewa/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'swish'){
            return url("payment/swish/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'momo'){
            return url("payment/momo/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'payfast'){
            return url("payment/payfast/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'worldpay'){
            return url("payment/worldpay/pay/?payment_id={$payment->id}");
        }else if($payment->payment_method == 'sixcash'){
            return url("payment/sixcash/pay/?payment_id={$payment->id}");
        }

        return false;
    }
}