<?php

defined('ABSPATH') || exit;
use Automattic\WooCommerce\Internal\AssignDefaultCategory;
use Automattic\WooCommerce\Internal\DownloadPermissionsAdjuster;
use Automattic\WooCommerce\Internal\ProductAttributesLookup\DataRegenerator;
use Automattic\WooCommerce\Internal\ProductAttributesLookup\LookupDataStore;
use Automattic\WooCommerce\Internal\RestockRefundedItemsAdjuster;
use Automattic\WooCommerce\Proxies\LegacyProxy;
final class WooCommerce
{
    public $version = '5.8.1';
    public $db_version = '430';
    protected static $_instance = null;
    public $session = null;
    public $query = null;
    public $product_factory = null;
    public $countries = null;
    public $integrations = null;
    public $cart = null;
    public $customer = null;
    public $order_factory = null;
    public $structured_data = null;
    public $deprecated_hook_handlers = array();
    public static function instance()
    {
        if (is_null(self::$_instance)) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }
    public function __clone()
    {
        wc_doing_it_wrong(__FUNCTION__, __('Cloning is forbidden.', 'woocommerce'), '2.1');
    }
    public function __wakeup()
    {
        wc_doing_it_wrong(__FUNCTION__, __('Unserializing instances of this class is forbidden.', 'woocommerce'), '2.1');
    }
    public function __get($key)
    {
        if (in_array($key, array('payment_gateways', 'shipping', 'mailer', 'checkout'), true)) {
            return $this->{$key}();
        }
    }
    public function __construct()
    {
        $this->define_constants();
        $this->define_tables();
        $this->includes();
        $this->init_hooks();
    }
    public function on_plugins_loaded()
    {
        do_action('woocommerce_loaded');
    }
    private function init_hooks()
    {
        register_activation_hook(WC_PLUGIN_FILE, array('WC_Install', 'install'));
        register_shutdown_function(array($this, 'log_errors'));
        add_action('plugins_loaded', array($this, 'on_plugins_loaded'), -1);
        add_action('admin_notices', array($this, 'build_dependencies_notice'));
        add_action('after_setup_theme', array($this, 'setup_environment'));
        add_action('after_setup_theme', array($this, 'include_template_functions'), 11);
        add_action('init', array($this, 'init'), 0);
        add_action('init', array('WC_Shortcodes', 'init'));
        add_action('init', array('WC_Emails', 'init_transactional_emails'));
        add_action('init', array($this, 'add_image_sizes'));
        add_action('init', array($this, 'load_rest_api'));
        add_action('switch_blog', array($this, 'wpdb_table_fix'), 0);
        add_action('activated_plugin', array($this, 'activated_plugin'));
        add_action('deactivated_plugin', array($this, 'deactivated_plugin'));
        add_action('woocommerce_installed', array($this, 'add_woocommerce_inbox_variant'));
        add_action('woocommerce_updated', array($this, 'add_woocommerce_inbox_variant'));
        wc_get_container()->get(DownloadPermissionsAdjuster::class);
        wc_get_container()->get(AssignDefaultCategory::class);
        wc_get_container()->get(DataRegenerator::class);
        wc_get_container()->get(LookupDataStore::class);
        wc_get_container()->get(RestockRefundedItemsAdjuster::class);
    }
    public function add_woocommerce_inbox_variant()
    {
        $config_name = 'woocommerce_inbox_variant_assignment';
        if (false === get_option($config_name, false)) {
            update_option($config_name, wp_rand(1, 12));
        }
    }
    public function log_errors()
    {
        $error = error_get_last();
        if ($error && in_array($error['type'], array(E_ERROR, E_PARSE, E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR), true)) {
            $logger = wc_get_logger();
            $logger->critical(sprintf(__('%1$s in %2$s on line %3$s', 'woocommerce'), $error['message'], $error['file'], $error['line']) . PHP_EOL, array('source' => 'fatal-errors'));
            do_action('woocommerce_shutdown_error', $error);
        }
    }
    private function define_constants()
    {
        $upload_dir = wp_upload_dir(null, false);
        $this->define('WC_ABSPATH', dirname(WC_PLUGIN_FILE) . '/');
        $this->define('WC_PLUGIN_BASENAME', plugin_basename(WC_PLUGIN_FILE));
        $this->define('WC_VERSION', $this->version);
        $this->define('WOOCOMMERCE_VERSION', $this->version);
        $this->define('WC_ROUNDING_PRECISION', 6);
        $this->define('WC_DISCOUNT_ROUNDING_MODE', 2);
        $this->define('WC_TAX_ROUNDING_MODE', 'yes' === get_option('woocommerce_prices_include_tax', 'no') ? 2 : 1);
        $this->define('WC_DELIMITER', '|');
        $this->define('WC_LOG_DIR', $upload_dir['basedir'] . '/wc-logs/');
        $this->define('WC_SESSION_CACHE_GROUP', 'wc_session_id');
        $this->define('WC_TEMPLATE_DEBUG_MODE', false);
        $this->define('WC_NOTICE_MIN_PHP_VERSION', '7.2');
        $this->define('WC_NOTICE_MIN_WP_VERSION', '5.2');
        $this->define('WC_PHP_MIN_REQUIREMENTS_NOTICE', 'wp_php_min_requirements_' . WC_NOTICE_MIN_PHP_VERSION . '_' . WC_NOTICE_MIN_WP_VERSION);
        $this->define('WC_SSR_PLUGIN_UPDATE_RELEASE_VERSION_TYPE', 'none');
    }
    private function define_tables()
    {
        global $wpdb;
        $tables = array('payment_tokenmeta' => 'woocommerce_payment_tokenmeta', 'order_itemmeta' => 'woocommerce_order_itemmeta', 'wc_product_meta_lookup' => 'wc_product_meta_lookup', 'wc_tax_rate_classes' => 'wc_tax_rate_classes', 'wc_reserved_stock' => 'wc_reserved_stock');
        foreach ($tables as $name => $table) {
            $wpdb->{$name} = $wpdb->prefix . $table;
            $wpdb->tables[] = $table;
        }
    }
    private function define($name, $value)
    {
        if (!defined($name)) {
            define($name, $value);
        }
    }
    public function is_rest_api_request()
    {
        if (empty($_SERVER['REQUEST_URI'])) {
            return false;
        }
        $rest_prefix = trailingslashit(rest_get_url_prefix());
        $is_rest_api_request = false !== strpos($_SERVER['REQUEST_URI'], $rest_prefix);
        return apply_filters('woocommerce_is_rest_api_request', $is_rest_api_request);
    }
    public function load_rest_api()
    {
        \Automattic\WooCommerce\RestApi\Server::instance()->init();
    }
    private function is_request($type)
    {
        switch ($type) {
            case 'admin':
                return is_admin();
            case 'ajax':
                return defined('DOING_AJAX');
            case 'cron':
                return defined('DOING_CRON');
            case 'frontend':
                return (!is_admin() || defined('DOING_AJAX')) && !defined('DOING_CRON') && !$this->is_rest_api_request();
        }
    }
    public function includes()
    {
        include_once WC_ABSPATH . 'includes/class-wc-autoloader.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-abstract-order-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-coupon-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-customer-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-customer-download-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-customer-download-log-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-object-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-order-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-order-item-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-order-item-product-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-order-item-type-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-order-refund-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-payment-token-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-product-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-product-variable-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-shipping-zone-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-logger-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-log-handler-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-webhooks-data-store-interface.php';
        include_once WC_ABSPATH . 'includes/interfaces/class-wc-queue-interface.php';
        include_once WC_ABSPATH . 'includes/traits/trait-wc-item-totals.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-data.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-object-query.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-payment-token.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-product.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-order.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-settings-api.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-shipping-method.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-payment-gateway.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-integration.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-log-handler.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-deprecated-hooks.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-session.php';
        include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-privacy.php';
        include_once WC_ABSPATH . 'includes/wc-core-functions.php';
        include_once WC_ABSPATH . 'includes/class-wc-datetime.php';
        include_once WC_ABSPATH . 'includes/class-wc-post-types.php';
        include_once WC_ABSPATH . 'includes/class-wc-install.php';
        include_once WC_ABSPATH . 'includes/class-wc-geolocation.php';
        include_once WC_ABSPATH . 'includes/class-wc-download-handler.php';
        include_once WC_ABSPATH . 'includes/class-wc-comments.php';
        include_once WC_ABSPATH . 'includes/class-wc-post-data.php';
        include_once WC_ABSPATH . 'includes/class-wc-ajax.php';
        include_once WC_ABSPATH . 'includes/class-wc-emails.php';
        include_once WC_ABSPATH . 'includes/class-wc-data-exception.php';
        include_once WC_ABSPATH . 'includes/class-wc-query.php';
        include_once WC_ABSPATH . 'includes/class-wc-meta-data.php';
        include_once WC_ABSPATH . 'includes/class-wc-order-factory.php';
        include_once WC_ABSPATH . 'includes/class-wc-order-query.php';
        include_once WC_ABSPATH . 'includes/class-wc-product-factory.php';
        include_once WC_ABSPATH . 'includes/class-wc-product-query.php';
        include_once WC_ABSPATH . 'includes/class-wc-payment-tokens.php';
        include_once WC_ABSPATH . 'includes/class-wc-shipping-zone.php';
        include_once WC_ABSPATH . 'includes/gateways/class-wc-payment-gateway-cc.php';
        include_once WC_ABSPATH . 'includes/gateways/class-wc-payment-gateway-echeck.php';
        include_once WC_ABSPATH . 'includes/class-wc-countries.php';
        include_once WC_ABSPATH . 'includes/class-wc-integrations.php';
        include_once WC_ABSPATH . 'includes/class-wc-cache-helper.php';
        include_once WC_ABSPATH . 'includes/class-wc-https.php';
        include_once WC_ABSPATH . 'includes/class-wc-deprecated-action-hooks.php';
        include_once WC_ABSPATH . 'includes/class-wc-deprecated-filter-hooks.php';
        include_once WC_ABSPATH . 'includes/class-wc-background-emailer.php';
        include_once WC_ABSPATH . 'includes/class-wc-discounts.php';
        include_once WC_ABSPATH . 'includes/class-wc-cart-totals.php';
        include_once WC_ABSPATH . 'includes/customizer/class-wc-shop-customizer.php';
        include_once WC_ABSPATH . 'includes/class-wc-regenerate-images.php';
        include_once WC_ABSPATH . 'includes/class-wc-privacy.php';
        include_once WC_ABSPATH . 'includes/class-wc-structured-data.php';
        include_once WC_ABSPATH . 'includes/class-wc-shortcodes.php';
        include_once WC_ABSPATH . 'includes/class-wc-logger.php';
        include_once WC_ABSPATH . 'includes/queue/class-wc-action-queue.php';
        include_once WC_ABSPATH . 'includes/queue/class-wc-queue.php';
        include_once WC_ABSPATH . 'includes/admin/marketplace-suggestions/class-wc-marketplace-updater.php';
        include_once WC_ABSPATH . 'includes/blocks/class-wc-blocks-utils.php';
        include_once WC_ABSPATH . 'includes/class-wc-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-data-store-wp.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-coupon-data-store-cpt.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-product-data-store-cpt.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-product-grouped-data-store-cpt.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-product-variable-data-store-cpt.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-product-variation-data-store-cpt.php';
        include_once WC_ABSPATH . 'includes/data-stores/abstract-wc-order-item-type-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-coupon-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-fee-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-product-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-shipping-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-tax-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-payment-token-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-customer-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-customer-data-store-session.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-customer-download-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-customer-download-log-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-shipping-zone-data-store.php';
        include_once WC_ABSPATH . 'includes/data-stores/abstract-wc-order-data-store-cpt.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-data-store-cpt.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-refund-data-store-cpt.php';
        include_once WC_ABSPATH . 'includes/data-stores/class-wc-webhook-data-store.php';
        include_once WC_ABSPATH . 'includes/legacy/class-wc-legacy-api.php';
        include_once WC_ABSPATH . 'includes/class-wc-api.php';
        include_once WC_ABSPATH . 'includes/class-wc-rest-authentication.php';
        include_once WC_ABSPATH . 'includes/class-wc-rest-exception.php';
        include_once WC_ABSPATH . 'includes/class-wc-auth.php';
        include_once WC_ABSPATH . 'includes/class-wc-register-wp-admin-settings.php';
        include_once WC_ABSPATH . 'includes/wccom-site/class-wc-wccom-site.php';
        include_once WC_ABSPATH . 'packages/action-scheduler/action-scheduler.php';
        if (defined('WP_CLI') && WP_CLI) {
            include_once WC_ABSPATH . 'includes/class-wc-cli.php';
        }
        if ($this->is_request('admin')) {
            include_once WC_ABSPATH . 'includes/admin/class-wc-admin.php';
        }
        if ($this->is_request('frontend')) {
            $this->frontend_includes();
        }
        if ($this->is_request('cron') && 'yes' === get_option('woocommerce_allow_tracking', 'no')) {
            include_once WC_ABSPATH . 'includes/class-wc-tracker.php';
        }
        $this->theme_support_includes();
        $this->query = new WC_Query();
        $this->api = new WC_API();
        $this->api->init();
    }
    private function theme_support_includes()
    {
        if (wc_is_wp_default_theme_active()) {
            switch (get_template()) {
                case 'twentyten':
                    include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-ten.php';
                    break;
                case 'twentyeleven':
                    include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-eleven.php';
                    break;
                case 'twentytwelve':
                    include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-twelve.php';
                    break;
                case 'twentythirteen':
                    include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-thirteen.php';
                    break;
                case 'twentyfourteen':
                    include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-fourteen.php';
                    break;
                case 'twentyfifteen':
                    include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-fifteen.php';
                    break;
                case 'twentysixteen':
                    include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-sixteen.php';
                    break;
                case 'twentyseventeen':
                    include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-seventeen.php';
                    break;
                case 'twentynineteen':
                    include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-nineteen.php';
                    break;
                case 'twentytwenty':
                    include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-twenty.php';
                    break;
                case 'twentytwentyone':
                    include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-twenty-one.php';
                    break;
            }
        }
    }
    public function frontend_includes()
    {
        include_once WC_ABSPATH . 'includes/wc-cart-functions.php';
        include_once WC_ABSPATH . 'includes/wc-notice-functions.php';
        include_once WC_ABSPATH . 'includes/wc-template-hooks.php';
        include_once WC_ABSPATH . 'includes/class-wc-template-loader.php';
        include_once WC_ABSPATH . 'includes/class-wc-frontend-scripts.php';
        include_once WC_ABSPATH . 'includes/class-wc-form-handler.php';
        include_once WC_ABSPATH . 'includes/class-wc-cart.php';
        include_once WC_ABSPATH . 'includes/class-wc-tax.php';
        include_once WC_ABSPATH . 'includes/class-wc-shipping-zones.php';
        include_once WC_ABSPATH . 'includes/class-wc-customer.php';
        include_once WC_ABSPATH . 'includes/class-wc-embed.php';
        include_once WC_ABSPATH . 'includes/class-wc-session-handler.php';
    }
    public function include_template_functions()
    {
        include_once WC_ABSPATH . 'includes/wc-template-functions.php';
    }
    public function init()
    {
        do_action('before_woocommerce_init');
        $this->load_plugin_textdomain();
        $this->product_factory = new WC_Product_Factory();
        $this->order_factory = new WC_Order_Factory();
        $this->countries = new WC_Countries();
        $this->integrations = new WC_Integrations();
        $this->structured_data = new WC_Structured_Data();
        $this->deprecated_hook_handlers['actions'] = new WC_Deprecated_Action_Hooks();
        $this->deprecated_hook_handlers['filters'] = new WC_Deprecated_Filter_Hooks();
        if ($this->is_request('frontend')) {
            wc_load_cart();
        }
        $this->load_webhooks();
        do_action('woocommerce_init');
    }
    public function load_plugin_textdomain()
    {
        $locale = determine_locale();
        $locale = apply_filters('plugin_locale', $locale, 'woocommerce');
        unload_textdomain('woocommerce');
        load_textdomain('woocommerce', WP_LANG_DIR . '/woocommerce/woocommerce-' . $locale . '.mo');
        load_plugin_textdomain('woocommerce', false, plugin_basename(dirname(WC_PLUGIN_FILE)) . '/i18n/languages');
    }
    public function setup_environment()
    {
        $this->define('WC_TEMPLATE_PATH', $this->template_path());
        $this->add_thumbnail_support();
    }
    private function add_thumbnail_support()
    {
        if (!current_theme_supports('post-thumbnails')) {
            add_theme_support('post-thumbnails');
        }
        add_post_type_support('product', 'thumbnail');
    }
    public function add_image_sizes()
    {
        $thumbnail = wc_get_image_size('thumbnail');
        $single = wc_get_image_size('single');
        $gallery_thumbnail = wc_get_image_size('gallery_thumbnail');
        add_image_size('woocommerce_thumbnail', $thumbnail['width'], $thumbnail['height'], $thumbnail['crop']);
        add_image_size('woocommerce_single', $single['width'], $single['height'], $single['crop']);
        add_image_size('woocommerce_gallery_thumbnail', $gallery_thumbnail['width'], $gallery_thumbnail['height'], $gallery_thumbnail['crop']);
        add_image_size('shop_catalog', $thumbnail['width'], $thumbnail['height'], $thumbnail['crop']);
        add_image_size('shop_single', $single['width'], $single['height'], $single['crop']);
        add_image_size('shop_thumbnail', $gallery_thumbnail['width'], $gallery_thumbnail['height'], $gallery_thumbnail['crop']);
    }
    public function plugin_url()
    {
        return untrailingslashit(plugins_url('/', WC_PLUGIN_FILE));
    }
    public function plugin_path()
    {
        return untrailingslashit(plugin_dir_path(WC_PLUGIN_FILE));
    }
    public function template_path()
    {
        return apply_filters('woocommerce_template_path', 'woocommerce/');
    }
    public function ajax_url()
    {
        return admin_url('admin-ajax.php', 'relative');
    }
    public function api_request_url($request, $ssl = null)
    {
        if (is_null($ssl)) {
            $scheme = wp_parse_url(home_url(), PHP_URL_SCHEME);
        } elseif ($ssl) {
            $scheme = 'https';
        } else {
            $scheme = 'http';
        }
        if (strstr(get_option('permalink_structure'), '/index.php/')) {
            $api_request_url = trailingslashit(home_url('/index.php/wc-api/' . $request, $scheme));
        } elseif (get_option('permalink_structure')) {
            $api_request_url = trailingslashit(home_url('/wc-api/' . $request, $scheme));
        } else {
            $api_request_url = add_query_arg('wc-api', $request, trailingslashit(home_url('', $scheme)));
        }
        return esc_url_raw(apply_filters('woocommerce_api_request_url', $api_request_url, $request, $ssl));
    }
    private function load_webhooks()
    {
        if (!is_blog_installed()) {
            return;
        }
        $limit = apply_filters('woocommerce_load_webhooks_limit', null);
        wc_load_webhooks('active', $limit);
    }
    public function initialize_cart()
    {
        if (is_null($this->customer) || !$this->customer instanceof WC_Customer) {
            $this->customer = new WC_Customer(get_current_user_id(), true);
            add_action('shutdown', array($this->customer, 'save'), 10);
        }
        if (is_null($this->cart) || !$this->cart instanceof WC_Cart) {
            $this->cart = new WC_Cart();
        }
    }
    public function initialize_session()
    {
        $session_class = apply_filters('woocommerce_session_handler', 'WC_Session_Handler');
        if (is_null($this->session) || !$this->session instanceof $session_class) {
            $this->session = new $session_class();
            $this->session->init();
        }
    }
    public function wpdb_table_fix()
    {
        $this->define_tables();
    }
    public function activated_plugin($filename)
    {
        include_once dirname(__FILE__) . '/admin/helper/class-wc-helper.php';
        if ('/woocommerce.php' === substr($filename, -16)) {
            set_transient('woocommerce_activated_plugin', $filename);
        }
        WC_Helper::activated_plugin($filename);
    }
    public function deactivated_plugin($filename)
    {
        include_once dirname(__FILE__) . '/admin/helper/class-wc-helper.php';
        WC_Helper::deactivated_plugin($filename);
    }
    public function queue()
    {
        return WC_Queue::instance();
    }
    public function checkout()
    {
        return WC_Checkout::instance();
    }
    public function payment_gateways()
    {
        return WC_Payment_Gateways::instance();
    }
    public function shipping()
    {
        return WC_Shipping::instance();
    }
    public function mailer()
    {
        return WC_Emails::instance();
    }
    public function build_dependencies_satisfied()
    {
        if (!file_exists(WC()->plugin_path() . '/assets/css/admin.css')) {
            return false;
        }
        if (!file_exists(WC()->plugin_path() . '/assets/js/admin/woocommerce_admin.min.js')) {
            return false;
        }
        return true;
    }
    public function build_dependencies_notice()
    {
        if ($this->build_dependencies_satisfied()) {
            return;
        }
        $message_one = __('You have installed a development version of WooCommerce which requires files to be built and minified. From the plugin directory, run <code>grunt assets</code> to build and minify assets.', 'woocommerce');
        $message_two = sprintf(__('Or you can download a pre-built version of the plugin from the <a href="%1$s">WordPress.org repository</a> or by visiting <a href="%2$s">the releases page in the GitHub repository</a>.', 'woocommerce'), 'https://wordpress.org/plugins/woocommerce/', 'https://github.com/woocommerce/woocommerce/releases');
        printf('<div class="error"><p>%s %s</p></div>', $message_one, $message_two);
    }
    public function is_wc_admin_active()
    {
        return function_exists('wc_admin_url');
    }
    public function call_function($function_name, ...$parameters)
    {
        return wc_get_container()->get(LegacyProxy::class)->call_function($function_name, ...$parameters);
    }
    public function call_static($class_name, $method_name, ...$parameters)
    {
        return wc_get_container()->get(LegacyProxy::class)->call_static($class_name, $method_name, ...$parameters);
    }
    public function get_instance_of(string $class_name, ...$args)
    {
        return wc_get_container()->get(LegacyProxy::class)->get_instance_of($class_name, ...$args);
    }
}