Viewing File: /home/ubuntu/btcthrottle-backend/app/Helpers/viewHelper.php

<?php

use Carbon\Carbon;

use App\Helpers\Helper;

use Illuminate\Support\Str;
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Facades\Session;
use Akaunting\Setting\Facade as Setting;
use Illuminate\Support\Facades\App;
use App\Models\Transaction;

/**
 * @method tr()
 *
 * @uses used to convert the string to language based string
 *
 * @created Arun
 *
 * @updated
 *
 * @param string $key
 *
 * @return string value
 */
function tr($key , $additional_key = "" , $lang_path = "messages.") {

        if (!Session::has('locale')) {

            $locale = Session::put('locale', config('app.locale'));

        }else {

            $locale = Session::get('locale');

        }
    return Lang::choice('messages.'.$key, 0, Array('other_key' => $additional_key), $locale);

}

/**
 * @method placeholder()
 * 
 * @uses used to get the placeholder for form fields
 * 
 * @created Sulabh
 * 
 * @updated
 * 
 * @param string $key
 * 
 * @return string value
 */

function placeholder($key, $additional_key = "") {

    return tr('enter').' '.tr($key, $additional_key);
}

/**
 * @method common_date()
 *
 * @uses used to get the timestamp with given timezone and the formate
 *
 * @created Arun
 *
 * @updated
 *
 * @param string $date, $timezone, $format
 *
 * @return string value
 */
function common_date($date , $timezone , $format = "d M Y h:i A") {

    if(!$date) {

        return "";

    }
    
    if($timezone) {

        $date = convertTimeToUSERzone($date , $timezone , $format);

    }   
   
    return date($format , strtotime($date));
}

/**
 * @method convertTimeToUTCzone()
 *
 * @uses this function convert string to UTC time zone
 *
 * @created Arun
 *
 * @updated
 *
 * @param string $str, $userTimezone, $format
 *
 * @return string value
 */
function convertTimeToUTCzone($str, $userTimezone, $format = 'Y-m-d H:i:s') {

    $new_str = new DateTime($str, new DateTimeZone($userTimezone));

    $new_str->setTimeZone(new DateTimeZone('UTC'));

    return $new_str->format( $format);
}

/**
 * @method convertTimeToUSERzone()
 *
 * @uses this function convert string to Given time zone
 *
 * @created Arun
 *
 * @updated
 *
 * @param string $str, $userTimezone, $format
 *
 * @return string value
 */
function convertTimeToUSERzone($str, $userTimezone, $format = 'Y-m-d H:i:s') {

    if(empty($str)){
        return '';
    }
    
    try {
        
        $new_str = new DateTime($str, new DateTimeZone('UTC') );
        
        $new_str->setTimeZone(new DateTimeZone( $userTimezone ));
    }
    catch(\Exception $e) {
        // Do Nothing
    }
    
    return $new_str->format( $format);
}

/**
 * @method routefreestring()
 *
 * @uses formate string with space and other special characters to -
 *
 * @created Arun
 *
 * @updated
 *
 * @param string $string
 *
 * @return string value
 */
function routefreestring($string) {

    $string = preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(' ', '-', $string));
    
    $search = [' ', '&', '%', "?",'=','{','}','$'];

    $replace = ['-', '-', '-' , '-', '-', '-' , '-','-'];

    $string = str_replace($search, $replace, $string);

    return $string;
    
}

/**
 * @method shrink_text()
 *
 * @uses formate longtext to short
 *
 * @created Arun
 *
 * @updated
 *
 * @param string $text, $end_position
 *
 * @return string value
 */
function shrink_text($text, $end_position) {

    return strlen($text) > $end_position ? substr($text, 0, $end_position).'...' : $text;
}

/**
 * @method formatted_amount()
 *
 * @uses formate amount with respective currency
 *
 * @created Arun
 *
 * @updated
 *
 * @param string $amount, $currency_code
 *
 * @return string value
 */
function formatted_amount($amount = 0.00, $currency_code = "") {

    $currency_code = $currency_code ? : Setting::get('currency_code', 'USD');

    $currency = Setting::get('currency', '$');

    $amount = number_format((float)$amount, 2, '.', '');

    $formatted_amount = "$currency $amount" ? : "0.00";

    return $formatted_amount;
}

/**
 * @method api_success()
 *
 * @uses translate for api success response
 *
 * @created Arun
 *
 * @updated
 *
 * @param string $key , $other_key , $lang_path
 *
 * @return string value
 */
function api_success($key , $other_key = "" , $lang_path = "messages.") {

    if (!Session::has('locale')) {

        $locale = Session::put('locale', config('app.locale'));

    } else {

        $locale = Session::get('locale');

    }
    return Lang::choice('api-success.'.$key, 0, Array('other_key' => $other_key), $locale);

}

/**
 * @method api_error()
 *
 * @uses translate for api error response
 *
 * @created Arun
 *
 * @updated
 *
 * @param string $key , $other_key , $lang_path
 *
 * @return string value
 */
function api_error($key , $other_key = "" , $lang_path = "messages.") {

    if (!Session::has('locale')) {

        $locale = Session::put('locale', config('app.locale'));

    } else {

        $locale = Session::get('locale');

    }
    return Lang::choice('api-error.'.$key, 0, Array('other_key' => $other_key), $locale);

}

/**
 * @method envfile()
 *
 * @uses get the configuration value from .env file 
 *
 * @created Vidhya R
 *
 * @updated
 *
 * @param string $key
 *
 * @return string value
 */

function envfile($key) {

    $data = getEnvValues();

    if($data) {
        return $data[$key];
    }

    return "";

}

function getEnvValues() {

    $data =  [];

    $path = base_path('.env');

    if(file_exists($path)) {

        $values = file_get_contents($path);

        $values = explode("\n", $values);

        foreach ($values as $key => $value) {

            $var = explode('=',$value);

            if(count($var) == 2 ) {
                if($var[0] != "")
                    $data[$var[0]] = $var[1] ? $var[1] : null;
            } else if(count($var) > 2 ) {
                $keyvalue = "";
                foreach ($var as $i => $imp) {
                    if ($i != 0) {
                        $keyvalue = ($keyvalue) ? $keyvalue.'='.$imp : $imp;
                    }
                }
                $data[$var[0]] = $var[1] ? $keyvalue : null;
            }else {
                if($var[0] != "")
                    $data[$var[0]] = null;
            }
        }

        array_filter($data);
    
    }

    return $data;

}

/**
 * @method emptyObject()
 *
 * @uses get empty object for exception
 *
 * @created Arun
 *
 * @updated
 *
 * @param
 *
 * @return string value
 */
function emptyObject() {
    return (Object)[];
}

/**
 * @method common_server_date()
 *
 * @uses Get server timestamp
 *
 * @created Arun
 *
 * @updated
 *
 * @param
 *
 * @return string value
 */
function common_server_date($date , $timezone = "" , $format = "d M Y h:i A") {

    if($date == "0000-00-00 00:00:00" || $date == "0000-00-00" || !$date) {

        return $date = '';
    }

    if($timezone) {

        $date = convertTimeToUTCzone($date, $timezone, $format);

    }

    return $timezone ? $date : date($format, strtotime($date));

}

/**
 * @method footer_section_formatted()
 *
 * @uses to formate the footer_section
 *
 * @created shakthi
 *
 * @updated
 *
 * @param 
 *
 * @return 
 */
function footer_section_formatted($footer_section) {

    $footer_section_formatted = [ 
         FOOTER_SECTION_NONE => tr('none'),
         FOOTER_SECTION_1 => tr('one'),
         FOOTER_SECTION_2 => tr('two'), 
         FOOTER_SECTION_3 => tr('three')
     ];

    return isset($footer_section_formatted[$footer_section]) ? $footer_section_formatted[$footer_section] : tr('na');
}

/**
 * To get a withdrawals status in text format.
 * 
 * @created Karthick
 *  
 * @param int $status
 * @return string
*/
function withdrawal_status_formatted($status) {

    $status_formattd = [ 
        WITHDRAW_INITIATED => tr('initiated'),
        WITHDRAW_PAID => tr('paid'),
        WITHDRAW_ONHOLD => tr('onhold'),
        WITHDRAW_REJECTED => tr('rejected'),
        WITHDRAW_CANCELLED => tr('cancelled'),
    ];

    return isset($status_formattd[$status]) ? $status_formattd[$status] : tr('na');
}

/**
 * To get document type.
 * 
 * @created Karthick
 *  
 * @param int $document_id
 * @return int
*/
function get_document_type($document_id) {

    $document = Document::find($document_id);
    
    return $document ? $document->type : 1;
}

/**
 * To get document status text.
 * 
 * @created Karthick
 *  
 * @param int $status
 * @return string
*/
function get_document_status($status) {

    $document_status = [ 
        USER_DOCUMENT_NONE => tr('none'),
        USER_DOCUMENT_PENDING => tr('pending'), 
        USER_DOCUMENT_APPROVED => tr('approved'), 
        USER_DOCUMENT_DECLINED => tr('declined')
    ];

    return isset($document_status[$status]) ? $document_status[$status] : tr('na');
}

/*
 * @method get_withdrawal_request_badge()
 *
 * @uses to get bootstrap badge color for view - status
 *
 * @created Shakthi
 *
 * @updated
 *
 * @param 
 *
 * @return 
 */
function get_withdrawal_request_badge($status) {

    $badges = [ 
         WITHDRAW_INITIATED => 'badge-light-warning',
         WITHDRAW_PAID => 'badge-light-success',
         WITHDRAW_REJECTED => 'badge-light-danger',
         WITHDRAW_CANCELLED => 'badge-light-info'
    ];

    return isset($badges[$status]) ? $badges[$status] : 'badge-light-primary';
}

/**
 * @method get_user_document_badge()
 *
 * @uses to get bootstrap badge color for view - status
 *
 * @created Shakthi
 *
 * @updated
 *
 * @param 
 *
 * @return 
 */
function get_user_document_badge($status) {

    $badges = [ 
        USER_DOCUMENT_PENDING => 'badge-light-warning',
        USER_DOCUMENT_APPROVED => 'badge-light-success', 
        USER_DOCUMENT_DECLINED => 'badge-light-danger'
    ];

    return isset($badges[$status]) ? $badges[$status] : 'badge-light-';
}


/**
 * @method get_user_document_sub_page()
 *
 * @uses to get sub page name for orders in sidebar.
 *
 * @created shakthi
 *
 * @updated
 *
 * @param 
 *
 * @return 
 */
function get_user_document_sub_page($status) {

    $status_sub_badge = [
        USER_DOCUMENT_PENDING => 'document-pending',
        USER_DOCUMENT_APPROVED => 'document-approved', 
        USER_DOCUMENT_DECLINED => 'document-declined'
    ];

    return isset($status_sub_badge[$status]) ? $status_sub_badge[$status] : 'user-document-all';
}

/**
 * @method get_user_document_status()
 *
 * @uses to get status text
 *
 * @created Shakthi
 *
 * @updated
 *
 * @param 
 *
 * @return 
 */
function user_document_status_formatted($status) {

    $status_formattd = [
        USER_DOCUMENT_PENDING => tr('pending') , 
        USER_DOCUMENT_APPROVED => tr('approved'), 
        USER_DOCUMENT_DECLINED => tr('declined')
    ];

    return isset($status_formattd[$status]) ? $status_formattd[$status] : tr('pending');
}

/**
 * To get subscription plan types.
 * 
 * @created Karthick
 * 
 * @return array
*/
function get_plan_types() {

    return [PLAN_TYPE_DAY, PLAN_TYPE_WEEK, PLAN_TYPE_MONTH, PLAN_TYPE_YEAR];
}

/**
 * To get subscription plan type in text format.
 * 
 * @created Karthick
 * 
 * @param string
 * 
 * @return array
*/
function get_plan_type_formatted($plan_type) {

    $plan_type_formattd = [
        PLAN_TYPE_DAY => tr('day') , 
        PLAN_TYPE_WEEK => tr('week'), 
        PLAN_TYPE_MONTH => tr('month'),
        PLAN_TYPE_YEAR => tr('year')
    ];

    return isset($plan_type_formattd[$plan_type]) ? $plan_type_formattd[$plan_type] : tr('na');
}

/**
 * To format subscription plan.
 * 
 * @created Karthick
 * 
 * @param int | $plan
 * 
 * @param string | $plan_type
 * 
 * @return string
*/
function subscription_formatted($plan, $plan_type) {

    if(!$plan || !$plan_type) {

        return '';
    }

    return $subscription_formatted = $plan . ' ' . Str::plural($plan_type, $plan);
}

/**
 * To format ticket status.
 * 
 * @created Karthick
 * 
 * @param int | $status
 * 
 * @return string
*/
function ticket_formatted($status) {

    $status_formattd = [
        TICKET_CREATED => tr('created') , 
        TICKET_ACCEPTED => tr('accepted'), 
        TICKET_CLOSED => tr('closed')
    ];

    return isset($status_formattd[$status]) ? $status_formattd[$status] : tr('na');
}

/**
 * To get tailwind badge class for ticket status.
 * 
 * @created Karthick
 * 
 * @param int | $status
 * 
 * @return string
*/
function ticket_badge($status) {

    $badge = [
        TICKET_CREATED => 'bg-secondary/10 text-secondary dark:bg-secondary/15', 
        TICKET_ACCEPTED => 'bg-info/10 text-info dark:bg-info/15', 
        TICKET_CLOSED => 'bg-success/10 text-success dark:bg-success/15'
    ];

    return isset($badge[$status]) ? $badge[$status] : 'bg-error/10 text-error dark:bg-error/15';
}

/**
 * To format ticket priority.
 * 
 * @created Karthick
 * 
 * @param int | $status
 * 
 * @return string
*/
function ticket_priority_formatted($status) {

    $priority_formatted = [
        PRIORITY_LOW => tr('low') , 
        PRIORITY_MEDIUM => tr('medium'), 
        PRIORITY_HIGH => tr('high')
    ];

    return isset($priority_formatted[$status]) ? $priority_formatted[$status] : tr('na');
}

/**
 * To get tailwind badge class for ticket priority.
 * 
 * @created Karthick
 * 
 * @param int | $status
 * 
 * @return string
*/
function ticket_priority_badge($status) {

    $badge = [
        PRIORITY_LOW => 'bg-success/10 text-success dark:bg-success/15', 
        PRIORITY_MEDIUM => 'bg-warning/10 text-warning dark:bg-warning/15', 
        PRIORITY_HIGH => 'bg-error/10 text-error dark:bg-error/15'
    ];

    return isset($badge[$status]) ? $badge[$status] : 'bg-error/10 text-error dark:bg-error/15';
}

/**
 * To get roles.
 * 
 * @created Karthick
 * 
 * @return array
*/
function get_roles() {

    return [WRITE, READ];
}

function text_formatted($text) {

    return !$text ? '' : substr($text, 0, 4).".....".substr($text, -(8));
}

/**
 * To format chat status text.
 * 
 * @created Karthick
 * 
 * @param int | $status
 * 
 * @return string
*/
function chat_status_formatted($status) {

    $status_formattd = [
        CHAT_INITIATED => tr('initiated') , 
        CHAT_ONGOING => tr('ongoing'), 
        CHAT_CANCELLED => tr('cancelled'),
        CHAT_MISSED => tr('missed'),
        CHAT_OFFLINE => tr('offline'),
        CHAT_COMPLETED => tr('completed')
    ];

    return isset($status_formattd[$status]) ? $status_formattd[$status] : tr('na');
}

/**
 * To get tailwind badge class for chat status.
 * 
 * @created Karthick
 * 
 * @param int | $status
 * 
 * @return string
*/
function chat_status_badge($status) {

    $badge = [
        CHAT_INITIATED => 'bg-secondary/10 text-secondary dark:bg-secondary/15', 
        CHAT_ONGOING => 'bg-info/10 text-info dark:bg-info/15', 
        CHAT_CANCELLED => 'bg-error/10 text-error dark:bg-error/15',
        CHAT_MISSED => 'bg-primary/10 text-primary dark:bg-primary/15',
        CHAT_OFFLINE => 'bg-warning/10 text-warning dark:bg-warning/15',
        CHAT_COMPLETED => 'bg-success/10 text-success dark:bg-success/15'
    ];

    return isset($badge[$status]) ? $badge[$status] : 'bg-error/10 text-error dark:bg-error/15';
}

/**
 * To format status text.
 * 
 * @created Karthick
 * 
 * @param int | $status
 * 
 * @return string
*/
function status_formatted($status) {

    return $status ? tr('approved') : tr('declined');
}

/**
 * To format kyc status text.
 * 
 * @created Shakthi
 * 
 * @param int | $status
 * 
 * @return string
*/
function kyc_status_formatted($status) {

   $kyc_status_formattd = [
        KYC_PENDING => tr('pending'), 
        KYC_INITIATED => tr('initiated'),
        KYC_APPROVED => tr('approved'),
    ];
    return $kyc_status_formattd[$status] ?? tr('na');
}

function kyc_status_badge($kyc_status) {

    $badge = [
        KYC_PENDING => 'badge bg-label-primary', 
        KYC_INITIATED => 'badge bg-label-warning', 
        KYC_APPROVED => 'badge bg-label-success',
    ];

    return isset($badge[$kyc_status]) ? $badge[$kyc_status] : 'badge bg-label-danger';
}
/**
 * To format email status text.
 * 
 * @created Karthick
 * 
 * @param int | $email_status
 * 
 * @return string
*/
function email_status_formatted($email_status) {

    return $email_status ? tr('verified') : tr('not_verified');
}

/**
 * To format status text.
 * 
 * @created Arun
 * 
 * @param int | $status
 * 
 * @return string
*/
function payment_status_formatted($status) {

    $status_formattd = [
        PAYMENT_INITIATED => tr('initiated') , 
        PAYMENT_APPROVED => tr('approved'), 
        PAYMENT_DECLINED => tr('declined')
    ];

    return isset($status_formattd[$status]) ? $status_formattd[$status] : tr('na');
}

/**
 * To format payment link api url.
 * 
 * @created Karthick
 * 
 * @param int | $type
 * 
 * @param string | $token
 * 
 * @return string
*/
function get_payment_link_api_url($type, $token): string {

    if(!$type || !$token) return tr('url_not_found');

    $payment_link_api_urls = [
        PAY_IN => route('payment_links.'.PAY_IN, ['token' => $token]),
        PAY_OUT => route('payment_links.'.PAY_OUT, ['token' => $token])
    ];

    return isset($payment_link_api_urls[$type]) ? $payment_link_api_urls[$type] : tr('na');
}

/**
 * To generate a unique id in custom length.
 * 
 * @created Karthick
 * 
 * @param int | $length
 * 
 * @return string
*/
function generate_unique_id($length = 10): string {

    $unique_id = '';

    while($length > Str::length($unique_id)) {
        $unique_id .= sha1(time().rand());
    }

    return Str::substr($unique_id, 1, $length);
}

/**
 * To format transaction type in text.
 * 
 * @created Karthick
 * 
 * @param int | $type
 * 
 * @return string
*/
function transaction_type_formatted($type): string {

    $transaction_types = [
        PAY_IN => tr('pay_in'),
        PAY_OUT => tr('pay_out')
    ];

    return isset($transaction_types[$type]) ? $transaction_types[$type] : tr('na');
}

/**
 * To encrypt / decrypt a certain details
 * 
 * @created Karthick
 * 
 * REF : https://docs.google.com/document/d/1jxl3fBJw8m2SCwkhYdJJP_3SSCE8_ZeZ/edit#heading=h.rio8g27xqutn
 *
 * @param string | $action
 * 
 * @param string | $details
 * 
 * @param string | $secret
 * 
 * @return string
*/
function encrypt_decrypt($action, $details, $secret) {

    $encrypt_method = config('app.encrypt.method'); $encrypt_iv = config('app.encrypt.iv');

    if(!in_array($action, [ENCRYPT, DECRYPT]) || !$details || !$secret || !$encrypt_method || !$encrypt_iv) {
        return '';
    }

    $key = substr(hash('sha256', $secret, true), 0, 32); $iv = substr(hash('sha256', $encrypt_iv), 0, 16);

    if($action == ENCRYPT) {
        $encrypt_decrypt = urlencode(base64_encode(openssl_encrypt($details, $encrypt_method, $key, OPENSSL_RAW_DATA, $iv)));
    } else {
        $encrypt_decrypt = json_decode(openssl_decrypt(base64_decode(urldecode($details)), $encrypt_method, $key, OPENSSL_RAW_DATA, $iv), true);   
    }
    return $encrypt_decrypt;
}

/**
 * To format status badge in css class.
 * 
 * @created Karthick
 * 
 * @param int | $status
 * 
 * @return string
*/
function status_badge_formatted($status): string {

    $status_badge = [
        APPROVED => 'bg-success/10 text-success dark:bg-success/15',
        DECLINED => 'bg-error/10 text-error dark:bg-error/15',
    ];

    return isset($status_badge[$status]) ? $status_badge[$status] : $status_badge[1];
}

/**
 * To format payment link type in text.
 * 
 * @created Karthick
 * 
 * @param int | $type
 * 
 * @return string
*/
function payment_link_type_formatted($type): string {

    $payment_link_types = [
        PAYMENT_LINK_TYPE_UPI => tr('upi'),
        PAYMENT_LINK_TYPE_CARD => tr('card'),
        PAYMENT_LINK_TYPE_CRYPTO => tr('crypto'),
        PAYMENT_LINK_TYPE_INR => tr('inr')
    ];

    return isset($payment_link_types[$type]) ? $payment_link_types[$type] : tr('na');
}

/**
 * To get the all crypto methods.
 * 
 * @created Karthick
 * 
 * @return array
*/
function get_crypto_types() {

    return [
        CRYPTO_TYPE_ETH,
        CRYPTO_TYPE_BUSD,
        CRYPTO_TYPE_USDC,
        CRYPTO_TYPE_USDT_ERC20,
        CRYPTO_TYPE_USDT_TRON20,
    ];
}

/**
 * To get the crypto api id to get the token value.
 * 
 * @created Karthick
 * 
 * @param int $crypto_type
 * 
 * @return string
*/
function get_crypto_type_api_id($crypto_type):string {

    $crypto_type_api_ids = [
        CRYPTO_TYPE_ETH => 'ethereum',
        CRYPTO_TYPE_BUSD => 'binance-usd',
        CRYPTO_TYPE_USDC => 'usd-coin',
        CRYPTO_TYPE_USDT_ERC20 => 'tether',
        CRYPTO_TYPE_USDT_TRON20 => 'tron'
    ];

    return isset($crypto_type_api_ids[$crypto_type]) ? $crypto_type_api_ids[$crypto_type] : '';
}

/**
 * To get the crypto api id to get the token value.
 * 
 * @created Karthick
 * 
 * @param int $crypto_type
 * 
 * @return string
*/
function get_crypto_symbol($crypto_type):string {

    $crypto_type_api_ids = [
        CRYPTO_TYPE_ETH => 'ETH',
        CRYPTO_TYPE_BUSD => 'BUSD',
        CRYPTO_TYPE_USDC => 'USDC',
        CRYPTO_TYPE_USDT_ERC20 => 'USDT',
        CRYPTO_TYPE_USDT_TRON20 => 'USDT'
    ];

    return isset($crypto_type_api_ids[$crypto_type]) ? $crypto_type_api_ids[$crypto_type] : '';
}

/**
 * To get the commisson % of admin for a particular payment type.
 * 
 * @created Karthick
 * 
 * @param int $crypto_type
 * 
 * @return string
*/
function get_commission_percentage($payment_type) {

    $admin_commission_types = [
        PAYMENT_LINK_TYPE_UPI => Setting::get('upi_commission', 10),
        PAYMENT_LINK_TYPE_CARD => Setting::get('card_commission', 10),
        PAYMENT_LINK_TYPE_CRYPTO => Setting::get('crypto_commission', 10),
        PAYMENT_LINK_TYPE_INR => Setting::get('inr_commission', 10)
    ];

    return isset($admin_commission_types[$payment_type]) ? $admin_commission_types[$payment_type] : null;
}

/**
 * To get user withdrawal status text.
 * 
 * @created Karthick
 *  
 * @param int $status
 * @return string
*/
function user_withdrawal_status_formatted($status) {

    $user_withdrawal_status = [ 
        WITHDRAW_INITIATED => tr('initiated'),
        WITHDRAW_PAID => tr('paid'), 
        WITHDRAW_ONHOLD => tr('onhold'), 
        WITHDRAW_REJECTED => tr('rejected'),
        WITHDRAW_CANCELLED => tr('cancelled'),
    ];

    return isset($user_withdrawal_status[$status]) ? $user_withdrawal_status[$status] : tr('na');
}

/**
 * To format payment link badge in css class.
 * 
 * @created Karthick
 * 
 * @param int | $payment_type
 * 
 * @return string
*/
function payment_link_type_badge($payment_type): string {

    $payment_link_type_badge = [
        PAYMENT_LINK_TYPE_UPI => 'badge bg-label-warning',
        PAYMENT_LINK_TYPE_CARD => 'badge bg-label-info',
        PAYMENT_LINK_TYPE_CRYPTO => 'badge bg-label-danger',
        PAYMENT_LINK_TYPE_INR => 'badge bg-label-success',
    ];

    return isset($payment_link_type_badge[$payment_type]) ? $payment_link_type_badge[$payment_type] : 'badge bg-label-danger';
}

/**
 * To format withdrawal badge in css class.
 * 
 * @created Karthick
 * 
 * @param int | $status
 * 
 * @return string
*/
function withdrawal_badge_formatted($status): string {

    $withdrawal_badge = [
        WITHDRAW_INITIATED => 'badge bg-label-primary',
        WITHDRAW_PAID => 'badge bg-label-success',
        WITHDRAW_ONHOLD => 'badge bg-label-info',
        WITHDRAW_REJECTED => 'badge bg-label-warning',
        WITHDRAW_CANCELLED => 'badge bg-label-danger'
    ];

    return isset($withdrawal_badge[$status]) ? $withdrawal_badge[$status] : 'badge bg-label-danger';
}

/**
 * To get the minimum amount for a particular payment type.
 * 
 * @created Karthick
 * 
 * @param int $crypto_type
 * 
 * @return string
*/
function get_minimum_pay_in_amount($payment_type) {

    $default = 10;

    $minimum_pay_in_amounts = [
        PAYMENT_LINK_TYPE_UPI => Setting::get('upi_minimum_pay_in_amount', $default),
        PAYMENT_LINK_TYPE_CARD => Setting::get('card_minimum_pay_in_amount', $default),
        PAYMENT_LINK_TYPE_CRYPTO => Setting::get('crypto_minimum_pay_in_amount', $default),
        PAYMENT_LINK_TYPE_INR => Setting::get('inr_minimum_pay_in_amount', $default)
    ];

    return isset($minimum_pay_in_amounts[$payment_type]) ? $minimum_pay_in_amounts[$payment_type] : $default;
}

/**
 * To get the matching transaction status constant for stylopay payments.
 * 
 * @created Karthick
 * 
 * @param int $code
 * 
 * @return int
*/
function get_transaction_status_constant($code) {

    $transaction_status_constants = [
        0 => TRANSACTION_PROCESSING,
        11 => TRANSACTION_PROCESSING,
        14 => TRANSACTION_SUCCESS,
        15 => TRANSACTION_FAILED
    ];

    return isset($transaction_status_constants[$code]) ? $transaction_status_constants[$code] : TRANSACTION_STYLOPAY_UNKNOWN;
}

/**
 * To format the long text.
 * 
 * @created Shakthi
 * 
 * @param string 
 * 
 * @return string
*/
function withdrawal_text_formatted($text, $count) {

    return !$text ? '' : substr($text, 0, $count).".....".substr($text, -($count));
}

/**
 * To get trader wallet payment status text.
 * 
 * @created Karthick
 *  
 * @param int $status
 * @return string
*/
function wallet_payment_status_formatted($status) {

    $wallet_payment_status = [ 
        PAYMENT_INITIATED => tr('initiated'),
        PAYMENT_APPROVED => tr('approved'), 
        PAYMENT_DECLINED => tr('declined')
    ];

    return isset($wallet_payment_status[$status]) ? $wallet_payment_status[$status] : tr('na');
}

/**
 * To format trader wallet payment badge in css class.
 * 
 * @created Karthick
 * 
 * @param int | $status
 * 
 * @return string
*/
function wallet_payment_badge_formatted($status): string {

    $withdrawal_badge = [
        PAYMENT_INITIATED => 'badge bg-label-primary',
        PAYMENT_APPROVED => 'badge bg-label-success',
        PAYMENT_DECLINED => 'badge bg-label-danger'
    ];

    return isset($withdrawal_badge[$status]) ? $withdrawal_badge[$status] : 'badge bg-label-danger';
}

/**
 * To get the inr type formatted text.
 * 
 * @created Karthick
 * 
 * @param int $type
 * 
 * @return string
*/
function inr_type_formatted($type) {

    $inr_types = [ 
        PAYMENT_METHOD_TYPE_UPI => tr('upi'),
        PAYMENT_METHOD_TYPE_NEFT => tr('neft'),
        PAYMENT_METHOD_TYPE_IMPS => tr('imps'),
        PAYMENT_METHOD_TYPE_RTGS => tr('rtgs')
    ];

    return isset($inr_types[$type]) ? $inr_types[$type] : tr('na');
}

/**
 * To format payment method badge in css class.
 * 
 * @created Karthick
 * 
 * @param int | $status
 * 
 * @return string
*/
function payment_method_badge_formatted($status): string {

    $payment_method_badge = [
        PAYMENT_METHOD_TYPE_NEFT => 'badge bg-success',
        PAYMENT_METHOD_TYPE_IMPS => 'badge bg-info',
        PAYMENT_METHOD_TYPE_RTGS => 'badge bg-warning',
    ];

    return isset($payment_method_badge[$status]) ? $payment_method_badge[$status] : 'badge bg-danger';
}

/**
 * To get all the available payment methods.
 * 
 * @created Karthick
 * 
 * @return array
*/
function get_payment_methods(): array {
    return [PAYMENT_METHOD_TYPE_UPI, PAYMENT_METHOD_TYPE_NEFT, PAYMENT_METHOD_TYPE_IMPS, PAYMENT_METHOD_TYPE_RTGS];
}

/**
 * To get transaction status text.
 * 
 * @created Arun 
 *  
 * @param int $status
 * @return string
*/
function transaction_status_formatted($status) {
    
    $transaction_status_formatted = [ 
        TRANSACTION_INITIATED => tr('initiated'),
        TRANSACTION_PROCESSING => tr('inprogress'),
        TRANSACTION_SUCCESS => tr('success'),
        TRANSACTION_FAILED => tr('failed'),
        TRANSACTION_CANCELLED => tr('cancelled'),
        TRANSACTION_CHARGEBACK => tr('chargeback'),
        TRANSACTION_REFUND => tr('refunded'),
    ];

    return isset($transaction_status_formatted[$status]) ? $transaction_status_formatted[$status] : tr('na');
}

/**
 * To get transaction badge class.
 * 
 * @created Arun
 *  
 * @param int $status
 * @return string
*/
function transaction_badge_formatted($status) {
    
    $transaction_badge_formatted = [ 
        TRANSACTION_INITIATED => 'badge bg-label-primary',
        TRANSACTION_PROCESSING => 'badge bg-label-info',
        TRANSACTION_SUCCESS => 'badge bg-label-success',
        TRANSACTION_FAILED => 'badge bg-label-danger',
        TRANSACTION_CANCELLED => 'badge bg-label-warning',
        TRANSACTION_CHARGEBACK => 'badge bg-label-primary',
        TRANSACTION_REFUND => 'badge bg-label-info',
    ];

    return isset($transaction_badge_formatted[$status]) ? $transaction_badge_formatted[$status] : 'badge bg-label-danger';
}

/**
 * To get the success message for transactions.
 *
 * @created Karthick
 *
 * @param int $key 
 * 
 * @param array $params
 *
 * @return string
 */
function transaction_success($key , $params = []) {

    App::setLocale(Session::get('locale', config('app.locale')));

    return __("transaction-success.$key", $params);
}

/**
 * To get the error message for transactions.
 *
 * @created Karthick
 *
 * @param int $key 
 * 
 * @param array $params
 *
 * @return string
 */
function transaction_error($key , $params = []) {

    App::setLocale(Session::get('locale', config('app.locale')));

    return __("transaction-error.$key", $params);
}

/**
 * To get the country codes (Alpha 2)
 *
 * @created Karthick
 *
 * @return array
*/
function country_codes(): array {
    
    return ["AF","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","IO","BN","BG","BF","BI","CV","KH","CM","CA","KY","CF","TD","CL","CN","CX","CC","CO","KM","CD","CG","CK","CR","HR","CU","CW","CY","CZ","CI","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","MK","RO","RU","RW","RE","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","UM","US","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW","AX"];
}

/**
 * To mask a card number.
 *
 * @created Karthick
 * 
 * @param string $card_number
 * 
 * @param int $digits
 *
 * @return array
*/
function card_masked($card_number, $digits = -4): array {

    $card_last_four_digits = Str::substr($card_number, $digits);

    return [
        'card_last_four_digits' => $card_last_four_digits,
        'card_number' => Str::substr($card_number, 0, 8) . Str::repeat("*", 4) . $card_last_four_digits
    ];
}

/**
 * To generate a payload using Transaction model.
 *
 * @created Karthick
 * 
 * @param $transaction
 *
 * @return array
*/
function generate_transaction_callback_payload($transaction): array {

    if(!$transaction instanceof Transaction) {

        return [];
    }

    return [
        "reference_id" => $transaction->unique_id,
        "order_id" => $transaction->order_id,
        "amount" => $transaction->total,
        "currency_code" => $transaction->currency_code,
        "currency_symbol" => $transaction->currency_symbol,
        "payment_id" => $transaction->payment_id,
        "mode" => $transaction->mode,
        "status" => transaction_status_formatted($transaction->status),
        "created_at" => $transaction->created_at
    ];
}

/**
 * To get the app all service types.
 *
 * @created Karthick
 *
 * @return array
*/
function get_all_service_types(): array {

    return [
        SERVICE_TYPE_ONE,
        SERVICE_TYPE_TWO,
        SERVICE_TYPE_THREE
    ];
}

/**
 * To get the app service types (only available services).
 *
 * @created Karthick
 *
 * @return array
*/
function get_available_service_types(): array {

    return [
        SERVICE_TYPE_ONE,
        SERVICE_TYPE_TWO
    ];
}

/**
 * To get the api mode formatted text.
 * 
 * @created Karthick
 * 
 * @param int | $mode
 * 
 * @return string
*/
function api_mode_formatted($mode): string {

    $api_modes = [ 
        TRANSACTION_MODE_SANDBOX => tr('sandbox'),
        TRANSACTION_MODE_LIVE => tr('live')
    ];

    return isset($api_modes[$mode]) ? $api_modes[$mode] : tr('na');
}

/**
 * To format api mode badge in css class.
 * 
 * @created Karthick
 * 
 * @param int | $mode
 * 
 * @return string
*/
function api_mode_badge_formatted($mode): string {

    $api_modes_badge = [
        TRANSACTION_MODE_SANDBOX => 'badge bg-warning',
        TRANSACTION_MODE_LIVE => 'badge bg-success'
    ];

    return isset($api_modes_badge[$mode]) ? $api_modes_badge[$mode] : 'badge bg-danger';
}

/**
 * To get the service type formatted text.
 * 
 * @created Karthick
 * 
 * @param int | $service_type
 * 
 * @return string
*/
function service_type_formatted($service_type): string {

    $service_types = [ 
        SERVICE_TYPE_ONE => tr('coriunder'),
        SERVICE_TYPE_TWO => tr('intersect')
    ];

    return isset($service_types[$service_type]) ? $service_types[$service_type] : tr('na');
}

/**
 * To format service type badge in css class.
 * 
 * @created Karthick
 * 
 * @param int | $service_type
 * 
 * @return string
*/
function service_type_badge_formatted($service_type): string {

    $service_type_badge = [
        SERVICE_TYPE_ONE => 'badge bg-label-info',
        SERVICE_TYPE_TWO => 'badge bg-label-warning'
    ];

    return isset($service_type_badge[$service_type]) ? $service_type_badge[$service_type] : 'badge bg-danger';
}

/**
 * To get the service type description text.
 * 
 * @created Karthick
 * 
 * @param int | $service_type
 * 
 * @return string
*/
function service_type_description($service_type): string {

    $service_descriptions = [ 
        SERVICE_TYPE_ONE => tr('coriunder_description'),
        SERVICE_TYPE_TWO => tr('intersect_description')
    ];

    return isset($service_descriptions[$service_type]) ? $service_descriptions[$service_type] : tr('na');
}

/**
 * To get the service type icon.
 * 
 * @created Karthick
 * 
 * @param int | $service_type
 * 
 * @return string
*/
function service_type_icon($service_type): string {

    $service_type_icons = [ 
        SERVICE_TYPE_ONE => 'square-rounded-letter-c',
        SERVICE_TYPE_TWO => 'circle-letter-i'
    ];

    return isset($service_type_icons[$service_type]) ? $service_type_icons[$service_type] : 'circle-letter-i';
}

function wallet_text_formatted($text, $count) {

    return !$text ? '' : substr($text, 0, $count).".....".substr($text, -($count));
}

?>
Back to Directory File Manager