<?php
/**
 * MainWP Module Cost Tracker Utility class.
 *
 * @package MainWP\Dashboard
 * @version 4.6
 */

namespace MainWP\Dashboard\Module\CostTracker;

use MainWP\Dashboard\MainWP_Utility;
use MainWP\Dashboard\MainWP_UI;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

/**
 * Class Cost_Tracker_Utility
 */
class Cost_Tracker_Utility {

    /**
     * Static variable to hold the single instance of the class.
     *
     * @static
     *
     * @var mixed Default null
     */
    public static $instance = null;

    /**
     * Variable to hold the option name.
     *
     * @var string Default option name.
     */
    protected $option_handle = 'mainwp_module_cost_tracker_options';

    /**
     * Variable to hold the options.
     *
     * @var mixed Options.
     */
    protected $option;

    /**
     * Get Instance
     *
     * Creates public static instance.
     *
     * @static
     *
     * @return Cost_Tracker_Utility
     */
    public static function get_instance() {
        if ( null === static::$instance ) {
            static::$instance = new self();
        }
        return static::$instance;
    }

    /**
     * Constructor
     *
     * Runs each time the class is called.
     */
    public function __construct() {
        $this->option = get_option( $this->option_handle );
        if ( ! is_array( $this->option ) ) {
            $this->option = array();
        }
    }

    /**
     * Get Option
     *
     * Gets option in Databse.
     *
     * @param string $key Option key.
     * @param mixed  $defval Default value.
     * @param bool   $json_encoded Is json encoded value.
     *
     * @return mixed Retruns option value.
     */
    public function get_option( $key = null, $defval = '', $json_encoded = false ) {
        if ( isset( $this->option[ $key ] ) ) {
            $values = $this->option[ $key ];
            if ( $json_encoded ) {
                $values = ! empty( $values ) ? json_decode( $values, true ) : array();
                if ( ! is_array( $values ) ) {
                    $values = array();
                }
            }
            return $values;
        }
        return $defval;
    }

    /**
     * Set Option
     *
     * Sets option in Databse.
     *
     * @param string $key Option key.
     * @param mixed  $value Option value.
     *
     * @return mixed Update option.
     */
    public function set_option( $key, $value ) {
        $this->option[ $key ] = $value;
        return update_option( $this->option_handle, $this->option );
    }

    /**
     * Get All Options
     *
     * Gets options in Databse.
     *
     * @return mixed Retruns options value.
     */
    public function get_all_options() {
        return $this->option;
    }

    /**
     * Save All Options
     *
     * @param array $options Options.
     *
     * @return mixed Retruns value.
     */
    public function save_options( $options ) {
        return update_option( $this->option_handle, $options );
    }

    /**
     * Method render_product_icon().
     *
     * @param  string $file_name File icon.
     * @param  bool   $ret True|False To return.
     *
     * @return string
     */
    public static function render_product_icon( $file_name, $ret = false ) {

        $imgfavi = '';

        $favi_url = MainWP_Utility::get_saved_favicon_url( $file_name );
        if ( ! empty( $favi_url ) ) {
            $imgfavi = '<img src="' . esc_attr( $favi_url ) . '" style="width:28px;height:28px;" class="ui circular image" alt="Cost custom icon" />';
        }

        if ( $ret ) {
            return $imgfavi;
        }
        echo $imgfavi;//phpcs:ignore -- ok.
    }

    /**
     * Format the price with a currency symbol.
     *
     * @param  float $price Raw price.
     * @param  bool  $ret Return or echo value.
     * @param  array $params other params.
     *
     * @return string
     */
    public static function cost_tracker_format_price( $price, $ret = false, $params = array() ) { //phpcs:ignore -- NOSONAR - complex.
        if ( ! is_array( $params ) ) {
            $params = array();
        }

        $get_currency_format = ! empty( $params['get_currency_format'] ) ? true : false;
        $get_formated_number = ! empty( $params['get_formated_number'] ) ? true : false;
        $get_decimals        = ! empty( $params['get_decimals'] ) ? true : false;

        $currency = static::get_instance()->get_option( 'currency' );
        if ( empty( $currency ) ) {
            $currency = 'USD';
        }
        $settings = static::get_instance()->get_option( 'currency_format' );

        if ( ! is_array( $settings ) ) {
            $settings = array();
        }
        $default = static::default_currency_settings();
        $args    = array_merge( $default, $settings );

        // Convert to float to avoid issues on PHP 8.
        $price = (float) $price;

        $negative = $price < 0;

        $price = $negative ? $price * -1 : $price;
        $price = number_format( $price, $args['decimals'], $args['decimal_separator'], $args['thousand_separator'] );

        if ( $get_decimals ) {
            return $args['decimals'];
        }

        if ( $get_formated_number ) {
            return $price;
        }

        if ( $args['decimals'] > 0 ) {
            // trim zezos.
            $price = preg_replace( '/' . preg_quote( $args['decimal_separator'], '/' ) . '0++$/', '', $price ?? '' );
        }

        $currency_pos = $args['currency_position'];

        $format = '%1$s%2$s';
        switch ( $currency_pos ) {
            case 'left':
                $format = '%1$s%2$s';
                break;
            case 'right':
                $format = '%2$s%1$s';
                break;
            case 'left_space':
                $format = '%1$s %2$s';
                break;
            case 'right_space':
                $format = '%2$s %1$s';
                break;
            default:
                break;
        }

        if ( $get_currency_format ) {
            return array(
                'format'   => sprintf( $format, esc_html( static::get_currency_symbol( $currency ) ), '%1' ), // %1 for price holder.
                'decimals' => $args['decimals'],
            );
        }

        $formatted_price = ( $negative ? '-' : '' ) . sprintf( $format, '<span class="cost-tracker-currency-symbol">' . esc_html( static::get_currency_symbol( $currency ) ) . '</span>', esc_html( $price ) );
        $value           = '<span class="cost-tracker-currency-amount"><bdi>' . $formatted_price . '</bdi></span>';

        if ( $ret ) {
            return $value;
        }
        echo $value; // phpcs:ignore -- escaped.
    }

    /**
     * Format the group costs prices.
     *
     * @param  array $group_prices Group price.
     *
     * @return string
     */
    public static function get_separated_costs_price( $group_prices ) {

        $grouped = array(
            'weekly'    => 'W',
            'monthly'   => 'M',
            'quarterly' => 'Q',
            'yearly'    => 'Y',
            'lifetime'  => 'L',
        );

        $formated_prices = array();
        if ( is_array( $group_prices ) ) {
            foreach ( $grouped as $idx => $char ) {
                if ( ! empty( $group_prices[ $idx ] ) ) {
                    $formated_prices[ $idx ] = static::cost_tracker_format_price( $group_prices[ $idx ], true ) . '/' . $char;
                }
            }
        }
        if ( ! empty( $formated_prices ) ) {
            return implode( '|', $formated_prices );
        }
        return static::cost_tracker_format_price( 0, true );
    }

    /**
     * Method get_currency_symbol().
     *
     * @param string $currency Currency.
     *
     * @return string Currency symbol.
     */
    public static function get_currency_symbol( $currency ) {
        if ( ! is_string( $currency ) ) {
            return '';
        }
        $all_curs = static::get_all_currency_symbols();
        return isset( $all_curs[ $currency ]['symbol'] ) ? $all_curs[ $currency ]['symbol'] : '';
    }

    /**
     * Method get_all_currency_symbols().
     *
     * @return array Currency symbols.
     */
    public static function get_all_currency_symbols() { // phpcs:ignore -- NOSONAR -  multi lines.

        return array(
            'AFA' => array(
                'name'   => 'Afghan Afghani',
                'symbol' => '؋',
            ),
            'ALL' => array(
                'name'   => 'Albanian Lek',
                'symbol' => 'Lek',
            ),
            'DZD' => array(
                'name'   => 'Algerian Dinar',
                'symbol' => 'دج',
            ),
            'AOA' => array(
                'name'   => 'Angolan Kwanza',
                'symbol' => 'Kz',
            ),
            'ARS' => array(
                'name'   => 'Argentine Peso',
                'symbol' => '$',
            ),
            'AMD' => array(
                'name'   => 'Armenian Dram',
                'symbol' => '֏',
            ),
            'AWG' => array(
                'name'   => 'Aruban Florin',
                'symbol' => 'ƒ',
            ),
            'AUD' => array(
                'name'   => 'Australian Dollar',
                'symbol' => '$',
            ),
            'AZN' => array(
                'name'   => 'Azerbaijani Manat',
                'symbol' => 'm',
            ),
            'BSD' => array(
                'name'   => 'Bahamian Dollar',
                'symbol' => 'B$',
            ),
            'BHD' => array(
                'name'   => 'Bahraini Dinar',
                'symbol' => '.د.ب',
            ),
            'BDT' => array(
                'name'   => 'Bangladeshi Taka',
                'symbol' => '৳',
            ),
            'BBD' => array(
                'name'   => 'Barbadian Dollar',
                'symbol' => 'Bds$',
            ),
            'BYR' => array(
                'name'   => 'Belarusian Ruble',
                'symbol' => 'Br',
            ),
            'BEF' => array(
                'name'   => 'Belgian Franc',
                'symbol' => 'fr',
            ),
            'BZD' => array(
                'name'   => 'Belize Dollar',
                'symbol' => '$',
            ),
            'BMD' => array(
                'name'   => 'Bermudan Dollar',
                'symbol' => '$',
            ),
            'BTN' => array(
                'name'   => 'Bhutanese Ngultrum',
                'symbol' => 'Nu.',
            ),
            'BTC' => array(
                'name'   => 'Bitcoin',
                'symbol' => '฿',
            ),
            'BOB' => array(
                'name'   => 'Bolivian Boliviano',
                'symbol' => 'Bs.',
            ),
            'BAM' => array(
                'name'   => 'Bosnia-Herzegovina Convertible Mark',
                'symbol' => 'KM',
            ),
            'BWP' => array(
                'name'   => 'Botswanan Pula',
                'symbol' => 'P',
            ),
            'BRL' => array(
                'name'   => 'Brazilian Real',
                'symbol' => 'R$',
            ),
            'GBP' => array(
                'name'   => 'British Pound Sterling',
                'symbol' => '£',
            ),
            'BND' => array(
                'name'   => 'Brunei Dollar',
                'symbol' => 'B$',
            ),
            'BGN' => array(
                'name'   => 'Bulgarian Lev',
                'symbol' => 'Лв.',
            ),
            'BIF' => array(
                'name'   => 'Burundian Franc',
                'symbol' => 'FBu',
            ),
            'KHR' => array(
                'name'   => 'Cambodian Riel',
                'symbol' => 'KHR',
            ),
            'CAD' => array(
                'name'   => 'Canadian Dollar',
                'symbol' => '$',
            ),
            'CVE' => array(
                'name'   => 'Cape Verdean Escudo',
                'symbol' => '$',
            ),
            'KYD' => array(
                'name'   => 'Cayman Islands Dollar',
                'symbol' => '$',
            ),
            'XOF' => array(
                'name'   => 'CFA Franc BCEAO',
                'symbol' => 'CFA',
            ),
            'XAF' => array(
                'name'   => 'CFA Franc BEAC',
                'symbol' => 'FCFA',
            ),
            'XPF' => array(
                'name'   => 'CFP Franc',
                'symbol' => '₣',
            ),
            'CLP' => array(
                'name'   => 'Chilean Peso',
                'symbol' => '$',
            ),
            'CLF' => array(
                'name'   => 'Chilean Unit of Account',
                'symbol' => 'CLF',
            ),
            'CNY' => array(
                'name'   => 'Chinese Yuan',
                'symbol' => '¥',
            ),
            'COP' => array(
                'name'   => 'Colombian Peso',
                'symbol' => '$',
            ),
            'KMF' => array(
                'name'   => 'Comorian Franc',
                'symbol' => 'CF',
            ),
            'CDF' => array(
                'name'   => 'Congolese Franc',
                'symbol' => 'FC',
            ),
            'CRC' => array(
                'name'   => 'Costa Rican Colón',
                'symbol' => '₡',
            ),
            'HRK' => array(
                'name'   => 'Croatian Kuna',
                'symbol' => 'kn',
            ),
            'CUC' => array(
                'name'   => 'Cuban Convertible Peso',
                'symbol' => '$, CUC',
            ),
            'CZK' => array(
                'name'   => 'Czech Republic Koruna',
                'symbol' => 'Kč',
            ),
            'DKK' => array(
                'name'   => 'Danish Krone',
                'symbol' => 'Kr.',
            ),
            'DJF' => array(
                'name'   => 'Djiboutian Franc',
                'symbol' => 'Fdj',
            ),
            'DOP' => array(
                'name'   => 'Dominican Peso',
                'symbol' => '$',
            ),
            'XCD' => array(
                'name'   => 'East Caribbean Dollar',
                'symbol' => '$',
            ),
            'EGP' => array(
                'name'   => 'Egyptian Pound',
                'symbol' => 'ج.م',
            ),
            'ERN' => array(
                'name'   => 'Eritrean Nakfa',
                'symbol' => 'Nfk',
            ),
            'EEK' => array(
                'name'   => 'Estonian Kroon',
                'symbol' => 'kr',
            ),
            'ETB' => array(
                'name'   => 'Ethiopian Birr',
                'symbol' => 'Nkf',
            ),
            'EUR' => array(
                'name'   => 'Euro',
                'symbol' => '€',
            ),
            'FKP' => array(
                'name'   => 'Falkland Islands Pound',
                'symbol' => '£',
            ),
            'FJD' => array(
                'name'   => 'Fijian Dollar',
                'symbol' => 'FJ$',
            ),
            'GMD' => array(
                'name'   => 'Gambian Dalasi',
                'symbol' => 'D',
            ),
            'GEL' => array(
                'name'   => 'Georgian Lari',
                'symbol' => 'ლ',
            ),
            'DEM' => array(
                'name'   => 'German Mark',
                'symbol' => 'DM',
            ),
            'GHS' => array(
                'name'   => 'Ghanaian Cedi',
                'symbol' => 'GH₵',
            ),
            'GIP' => array(
                'name'   => 'Gibraltar Pound',
                'symbol' => '£',
            ),
            'GRD' => array(
                'name'   => 'Greek Drachma',
                'symbol' => '₯, Δρχ, Δρ',
            ),
            'GTQ' => array(
                'name'   => 'Guatemalan Quetzal',
                'symbol' => 'Q',
            ),
            'GNF' => array(
                'name'   => 'Guinean Franc',
                'symbol' => 'FG',
            ),
            'GYD' => array(
                'name'   => 'Guyanaese Dollar',
                'symbol' => '$',
            ),
            'HTG' => array(
                'name'   => 'Haitian Gourde',
                'symbol' => 'G',
            ),
            'HNL' => array(
                'name'   => 'Honduran Lempira',
                'symbol' => 'L',
            ),
            'HKD' => array(
                'name'   => 'Hong Kong Dollar',
                'symbol' => '$',
            ),
            'HUF' => array(
                'name'   => 'Hungarian Forint',
                'symbol' => 'Ft',
            ),
            'ISK' => array(
                'name'   => 'Icelandic Króna',
                'symbol' => 'kr',
            ),
            'INR' => array(
                'name'   => 'Indian Rupee',
                'symbol' => '₹',
            ),
            'IDR' => array(
                'name'   => 'Indonesian Rupiah',
                'symbol' => 'Rp',
            ),
            'IRR' => array(
                'name'   => 'Iranian Rial',
                'symbol' => '﷼',
            ),
            'IQD' => array(
                'name'   => 'Iraqi Dinar',
                'symbol' => 'د.ع',
            ),
            'ILS' => array(
                'name'   => 'Israeli New Sheqel',
                'symbol' => '₪',
            ),
            'ITL' => array(
                'name'   => 'Italian Lira',
                'symbol' => 'L,£',
            ),
            'JMD' => array(
                'name'   => 'Jamaican Dollar',
                'symbol' => 'J$',
            ),
            'JPY' => array(
                'name'   => 'Japanese Yen',
                'symbol' => '¥',
            ),
            'JOD' => array(
                'name'   => 'Jordanian Dinar',
                'symbol' => 'ا.د',
            ),
            'KZT' => array(
                'name'   => 'Kazakhstani Tenge',
                'symbol' => 'лв',
            ),
            'KES' => array(
                'name'   => 'Kenyan Shilling',
                'symbol' => 'KSh',
            ),
            'KWD' => array(
                'name'   => 'Kuwaiti Dinar',
                'symbol' => 'ك.د',
            ),
            'KGS' => array(
                'name'   => 'Kyrgystani Som',
                'symbol' => 'лв',
            ),
            'LAK' => array(
                'name'   => 'Laotian Kip',
                'symbol' => '₭',
            ),
            'LVL' => array(
                'name'   => 'Latvian Lats',
                'symbol' => 'Ls',
            ),
            'LBP' => array(
                'name'   => 'Lebanese Pound',
                'symbol' => '£',
            ),
            'LSL' => array(
                'name'   => 'Lesotho Loti',
                'symbol' => 'L',
            ),
            'LRD' => array(
                'name'   => 'Liberian Dollar',
                'symbol' => '$',
            ),
            'LYD' => array(
                'name'   => 'Libyan Dinar',
                'symbol' => 'د.ل',
            ),
            'LTC' => array(
                'name'   => 'Litecoin',
                'symbol' => 'Ł',
            ),
            'LTL' => array(
                'name'   => 'Lithuanian Litas',
                'symbol' => 'Lt',
            ),
            'MOP' => array(
                'name'   => 'Macanese Pataca',
                'symbol' => '$',
            ),
            'MKD' => array(
                'name'   => 'Macedonian Denar',
                'symbol' => 'ден',
            ),
            'MGA' => array(
                'name'   => 'Malagasy Ariary',
                'symbol' => 'Ar',
            ),
            'MWK' => array(
                'name'   => 'Malawian Kwacha',
                'symbol' => 'MK',
            ),
            'MYR' => array(
                'name'   => 'Malaysian Ringgit',
                'symbol' => 'RM',
            ),
            'MVR' => array(
                'name'   => 'Maldivian Rufiyaa',
                'symbol' => 'Rf',
            ),
            'MRO' => array(
                'name'   => 'Mauritanian Ouguiya',
                'symbol' => 'MRU',
            ),
            'MUR' => array(
                'name'   => 'Mauritian Rupee',
                'symbol' => '₨',
            ),
            'MXN' => array(
                'name'   => 'Mexican Peso',
                'symbol' => '$',
            ),
            'MDL' => array(
                'name'   => 'Moldovan Leu',
                'symbol' => 'L',
            ),
            'MNT' => array(
                'name'   => 'Mongolian Tugrik',
                'symbol' => '₮',
            ),
            'MAD' => array(
                'name'   => 'Moroccan Dirham',
                'symbol' => 'MAD',
            ),
            'MZM' => array(
                'name'   => 'Mozambican Metical',
                'symbol' => 'MT',
            ),
            'MMK' => array(
                'name'   => 'Myanmar Kyat',
                'symbol' => 'K',
            ),
            'NAD' => array(
                'name'   => 'Namibian Dollar',
                'symbol' => '$',
            ),
            'NPR' => array(
                'name'   => 'Nepalese Rupee',
                'symbol' => '₨',
            ),
            'ANG' => array(
                'name'   => 'Netherlands Antillean Guilder',
                'symbol' => 'ƒ',
            ),
            'TWD' => array(
                'name'   => 'New Taiwan Dollar',
                'symbol' => '$',
            ),
            'NZD' => array(
                'name'   => 'New Zealand Dollar',
                'symbol' => '$',
            ),
            'NIO' => array(
                'name'   => 'Nicaraguan Córdoba',
                'symbol' => 'C$',
            ),
            'NGN' => array(
                'name'   => 'Nigerian Naira',
                'symbol' => '₦',
            ),
            'KPW' => array(
                'name'   => 'North Korean Won',
                'symbol' => '₩',
            ),
            'NOK' => array(
                'name'   => 'Norwegian Krone',
                'symbol' => 'kr',
            ),
            'OMR' => array(
                'name'   => 'Omani Rial',
                'symbol' => '.ع.ر',
            ),
            'PKR' => array(
                'name'   => 'Pakistani Rupee',
                'symbol' => '₨',
            ),
            'PAB' => array(
                'name'   => 'Panamanian Balboa',
                'symbol' => 'B/.',
            ),
            'PGK' => array(
                'name'   => 'Papua New Guinean Kina',
                'symbol' => 'K',
            ),
            'PYG' => array(
                'name'   => 'Paraguayan Guarani',
                'symbol' => '₲',
            ),
            'PEN' => array(
                'name'   => 'Peruvian Nuevo Sol',
                'symbol' => 'S/.',
            ),
            'PHP' => array(
                'name'   => 'Philippine Peso',
                'symbol' => '₱',
            ),
            'PLN' => array(
                'name'   => 'Polish Zloty',
                'symbol' => 'zł',
            ),
            'QAR' => array(
                'name'   => 'Qatari Rial',
                'symbol' => 'ق.ر',
            ),
            'RON' => array(
                'name'   => 'Romanian Leu',
                'symbol' => 'lei',
            ),
            'RUB' => array(
                'name'   => 'Russian Ruble',
                'symbol' => '₽',
            ),
            'RWF' => array(
                'name'   => 'Rwandan Franc',
                'symbol' => 'FRw',
            ),
            'SVC' => array(
                'name'   => 'Salvadoran Colón',
                'symbol' => '₡',
            ),
            'WST' => array(
                'name'   => 'Samoan Tala',
                'symbol' => 'SAT',
            ),
            'STD' => array(
                'name'   => 'São Tomé and Príncipe Dobra',
                'symbol' => 'Db',
            ),
            'SAR' => array(
                'name'   => 'Saudi Riyal',
                'symbol' => '﷼',
            ),
            'RSD' => array(
                'name'   => 'Serbian Dinar',
                'symbol' => 'din',
            ),
            'SCR' => array(
                'name'   => 'Seychellois Rupee',
                'symbol' => 'SRe',
            ),
            'SLL' => array(
                'name'   => 'Sierra Leonean Leone',
                'symbol' => 'Le',
            ),
            'SGD' => array(
                'name'   => 'Singapore Dollar',
                'symbol' => '$',
            ),
            'SKK' => array(
                'name'   => 'Slovak Koruna',
                'symbol' => 'Sk',
            ),
            'SBD' => array(
                'name'   => 'Solomon Islands Dollar',
                'symbol' => 'Si$',
            ),
            'SOS' => array(
                'name'   => 'Somali Shilling',
                'symbol' => 'Sh.so.',
            ),
            'ZAR' => array(
                'name'   => 'South African Rand',
                'symbol' => 'R',
            ),
            'KRW' => array(
                'name'   => 'South Korean Won',
                'symbol' => '₩',
            ),
            'SSP' => array(
                'name'   => 'South Sudanese Pound',
                'symbol' => '£',
            ),
            'XDR' => array(
                'name'   => 'Special Drawing Rights',
                'symbol' => 'SDR',
            ),
            'LKR' => array(
                'name'   => 'Sri Lankan Rupee',
                'symbol' => 'Rs',
            ),
            'SHP' => array(
                'name'   => 'St. Helena Pound',
                'symbol' => '£',
            ),
            'SDG' => array(
                'name'   => 'Sudanese Pound',
                'symbol' => '.س.ج',
            ),
            'SRD' => array(
                'name'   => 'Surinamese Dollar',
                'symbol' => '$',
            ),
            'SZL' => array(
                'name'   => 'Swazi Lilangeni',
                'symbol' => 'E',
            ),
            'SEK' => array(
                'name'   => 'Swedish Krona',
                'symbol' => 'kr',
            ),
            'CHF' => array(
                'name'   => 'Swiss Franc',
                'symbol' => 'CHf',
            ),
            'SYP' => array(
                'name'   => 'Syrian Pound',
                'symbol' => 'LS',
            ),
            'TJS' => array(
                'name'   => 'Tajikistani Somoni',
                'symbol' => 'SM',
            ),
            'TZS' => array(
                'name'   => 'Tanzanian Shilling',
                'symbol' => 'TSh',
            ),
            'THB' => array(
                'name'   => 'Thai Baht',
                'symbol' => '฿',
            ),
            'TOP' => array(
                'name'   => "Tongan Pa'anga",
                'symbol' => '$',
            ),
            'TTD' => array(
                'name'   => 'Trinidad & Tobago Dollar',
                'symbol' => '$',
            ),
            'TND' => array(
                'name'   => 'Tunisian Dinar',
                'symbol' => 'ت.د',
            ),
            'TRY' => array(
                'name'   => 'Turkish Lira',
                'symbol' => '₺',
            ),
            'TMT' => array(
                'name'   => 'Turkmenistani Manat',
                'symbol' => 'T',
            ),
            'UGX' => array(
                'name'   => 'Ugandan Shilling',
                'symbol' => 'USh',
            ),
            'UAH' => array(
                'name'   => 'Ukrainian Hryvnia',
                'symbol' => '₴',
            ),
            'AED' => array(
                'name'   => 'United Arab Emirates Dirham',
                'symbol' => 'إ.د',
            ),
            'UYU' => array(
                'name'   => 'Uruguayan Peso',
                'symbol' => '$',
            ),
            'USD' => array(
                'name'   => 'US Dollar',
                'symbol' => '$',
            ),
            'UZS' => array(
                'name'   => 'Uzbekistan Som',
                'symbol' => 'лв',
            ),
            'VUV' => array(
                'name'   => 'Vanuatu Vatu',
                'symbol' => 'VT',
            ),
            'VEF' => array(
                'name'   => 'Venezuelan BolÃvar',
                'symbol' => 'Bs',
            ),
            'VND' => array(
                'name'   => 'Vietnamese Dong',
                'symbol' => '₫',
            ),
            'YER' => array(
                'name'   => 'Yemeni Rial',
                'symbol' => '﷼',
            ),
            'ZMK' => array(
                'name'   => 'Zambian Kwacha',
                'symbol' => 'ZK',
            ),
            'ZWL' => array(
                'name'   => 'Zimbabwean dollar',
                'symbol' => '$',
            ),
        );
    }

    /**
     * Get default tracker settings.
     */
    public static function default_currency_settings() {
        return array(
            'currency_position'  => 'left',
            'thousand_separator' => ',',
            'decimal_separator'  => '.',
            'decimals'           => 2,
        );
    }

    /**
     * Validate currency settings.
     *
     * @param array $settings Settings value.
     */
    public static function validate_currency_settings( $settings ) {
        $default        = static::default_currency_settings();
        $valid_settings = array();

        $valid_settings['currency_position'] = isset( $settings['currency_position'] ) ? sanitize_text_field( wp_unslash( $settings['currency_position'] ) ) : 'left';
        if ( ! in_array( $valid_settings['currency_position'], array( 'left', 'right', 'left_space', 'right_space' ), true ) ) {
            $valid_settings['currency_position'] = $default['currency_position'];
        }

        $valid_settings['thousand_separator'] = isset( $settings['thousand_separator'] ) ? sanitize_text_field( wp_unslash( $settings['thousand_separator'] ) ) : $default['thousand_separator'];
        $valid_settings['decimal_separator']  = isset( $settings['decimal_separator'] ) ? sanitize_text_field( wp_unslash( $settings['decimal_separator'] ) ) : $default['decimal_separator'];
        $valid_settings['decimals']           = isset( $settings['decimals'] ) ? intval( $settings['decimals'] ) : $default['decimals'];

        if ( $valid_settings['decimals'] > 8 || $valid_settings['decimals'] < 0 ) {
            $valid_settings['decimals'] = $default['decimals'];
        }

        return $valid_settings;
    }

    /**
     * Get payment method icon
     *
     * Returns FOmantic UI icon for payment selected payment method.
     *
     * @param string $payment_method Selected patyment method.
     */
    public static function get_payment_method_icon( $payment_method ) {
        $icon = '<i class="money bill large icon"></i>';

        switch ( $payment_method ) {
            case 'PayPal':
                $icon = '<span data-tooltip="PayPal" data-inverted="" data-position="left center"><i class="paypal large icon"></i></span>';
                break;
            case 'Stripe':
                $icon = '<span data-tooltip="Stripe" data-inverted="" data-position="left center"><i class="stripe large icon"></i></span>';
                break;
            case 'Apple Pay':
                $icon = '<span data-tooltip="Apple Pay" data-inverted="" data-position="left center"><i class="apple pay large icon"></i></span>';
                break;
            case 'Amazon Pay':
                $icon = '<span data-tooltip="Amazon Pay" data-inverted="" data-position="left center"><i class="amazon pay large icon"></i></span>';
                break;
            case 'Google Pay':
                $icon = '<span data-tooltip="Google Pay" data-inverted="" data-position="left center"><i class="google pay large icon"></i></span>';
                break;
            case 'Credit Card':
                $icon = '<span data-tooltip="Credit Card" data-inverted="" data-position="left center"><i class="credit card large icon"></i></span>';
                break;
            case 'Debit Card':
                $icon = '<span data-tooltip="Debit Card" data-inverted="" data-position="left center"><i class="credit card outline large icon"></i></span>';
                break;
            case 'Cash':
                $icon = '<span data-tooltip="Cash" data-inverted="" data-position="left center"><i class="money bill alternate outline large icon"></i></span>';
                break;
            default:
                break;
        }

        return $icon;
    }


    /**
     * Method get_product_default_icons().
     *
     * @param bool   $get_all Get all icons.
     * @param string $def_type_icon to get default icon for types.
     *
     * @return string icon.
     */
    public static function get_product_default_icons( $get_all = true, $def_type_icon = '' ) {
        unset( $get_all );
        if ( 'default_custom_product_type' === $def_type_icon ) {
            return 'folder open';
        } elseif ( 'default_product' === $def_type_icon ) {
            return 'archive';
        }

        if ( ! empty( $def_type_icon ) ) {
            $default_pro_type_icons = Cost_Tracker_Admin::get_default_product_types_icons();
            if ( isset( $default_pro_type_icons[ $def_type_icon ] ) ) {
                return $default_pro_type_icons[ $def_type_icon ];
            }
        }
        return MainWP_UI::get_default_icons();
    }
}
