<?php

/**
 * WooCommerce Compatibility File
 *
 * @link https://woocommerce.com/
 *
 * @package Glamer
 */

/**
 * WooCommerce setup function.
 *
 * @link https://docs.woocommerce.com/document/third-party-custom-theme-compatibility/
 * @link https://github.com/woocommerce/woocommerce/wiki/Enabling-product-gallery-features-(zoom,-swipe,-lightbox)-in-3.0.0
 *
 * @return void
 */

function glamer_woocommerce_setup() {
    add_theme_support('woocommerce');
}
add_action('after_setup_theme', 'glamer_woocommerce_setup');

/**
 * WooCommerce specific scripts & stylesheets.
 *
 * @return void
 */

function glamer_woocommerce_scripts() {
    wp_enqueue_style('glamer-woocommerce-style', get_template_directory_uri() . '/woocommerce.css');

    $font_path = WC()->plugin_url() . '/assets/fonts/';
    $inline_font = '@font-face {
			font-family: "star";
			src: url("' . $font_path . 'star.eot");
			src: url("' . $font_path . 'star.eot?#iefix") format("embedded-opentype"),
				url("' . $font_path . 'star.woff") format("woff"),
				url("' . $font_path . 'star.ttf") format("truetype"),
				url("' . $font_path . 'star.svg#star") format("svg");
			font-weight: normal;
			font-style: normal;
		}';

    wp_add_inline_style('glamer-woocommerce-style', $inline_font);
}
add_action('wp_enqueue_scripts', 'glamer_woocommerce_scripts');

/**
 * Disable the default WooCommerce stylesheet.
 *
 * Removing the default WooCommerce stylesheet and enqueing your own will
 * protect you during WooCommerce core updates.
 *
 * @link https://docs.woocommerce.com/document/disable-the-default-stylesheet/

add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' );*/

/**
 * Add 'woocommerce-active' class to the body tag.
 *
 * @param  array $classes CSS classes applied to the body tag.
 * @return array $classes modified to include 'woocommerce-active' class.
 */
function glamer_woocommerce_active_body_class($classes) {
    $classes[] = 'woocommerce-active';

    return $classes;
}
add_filter('body_class', 'glamer_woocommerce_active_body_class');

/**
 * Products per page.
 *
 * @return integer number of products.
 */
function glamer_woocommerce_products_per_page() {
    return glamer_options('glamer_shop_item', 8);
}
add_filter('loop_shop_per_page', 'glamer_woocommerce_products_per_page');

/**
 * Product gallery thumnbail columns.
 *
 * @return integer number of columns.
 */
function glamer_woocommerce_thumbnail_columns() {
    return 3;
}
add_filter('woocommerce_product_thumbnails_columns', 'glamer_woocommerce_thumbnail_columns');

/**
 * Default loop columns on product archives.
 *
 * @return integer products per row.
 */

function glamer_woocommerce_loop_columns() {
    $glamer_shop_layouts = glamer_options('glamer_shop_layout', 'grid');
    $woo_layout_overwrite = $_GET['bs'] ?? $glamer_shop_layouts;
    if ($woo_layout_overwrite == 'left-sidebar' || $glamer_shop_layouts == 'right-sidebar') {
        $woo_column_overwrite = $_GET['col'] ??  glamer_options('glamer_shop_column', 2);
        $retrun = $woo_column_overwrite;
    } else {
        $woo_column_overwrite = $_GET['col'] ??  glamer_options('glamer_shop_column', 3);
        $retrun = $woo_column_overwrite;
    }
    return $retrun;
}
add_filter('loop_shop_columns', 'glamer_woocommerce_loop_columns');

/**
 * Related Products Args.
 *
 * @param array $args related products args.
 * @return array $args related products args.
 */
function glamer_woocommerce_related_products_args($args) {
    // Check for URL parameters (GET request) for layout and columns
    $glamer_single_shop_layout = isset($_GET['bs']) ? sanitize_text_field($_GET['bs']) : glamer_options('glamer_single_shop_layout', 'grid');

    // Determine the number of related items based on either the URL parameter or default options
    $glamer_woo_related_item = isset($_GET['col']) && intval($_GET['col']) > 0 ? intval($_GET['col']) : (
        ($glamer_single_shop_layout === 'left-sidebar' || $glamer_single_shop_layout === 'right-sidebar')
        ? glamer_options('glamer_shop_single_column', 2)
        : glamer_options('glamer_shop_single_column', 4)
    );

    // Ensure valid values for related items
    if ($glamer_woo_related_item <= 0) {
        $glamer_woo_related_item = 4; // Default to 4 if invalid
    }

    // Set the defaults for the query
    $defaults = array(
        'posts_per_page' => $glamer_woo_related_item,
        'columns'        => $glamer_woo_related_item,
    );

    // Merge defaults with the provided args
    $args = wp_parse_args($defaults, $args);

    return $args;
}
add_filter('woocommerce_output_related_products_args', 'glamer_woocommerce_related_products_args');



/**
 * Remove default WooCommerce wrapper.
 */
remove_action('woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10);
remove_action('woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10);

if (!function_exists('glamer_woocommerce_wrapper_before')) {
    /**
     * Before Content.
     *
     * Wraps all WooCommerce content in wrappers which match the theme markup.
     *
     * @return void
     */
    function glamer_woocommerce_wrapper_before() {
?>
        <main id="primary" class="site-main content-area">
            <div class="glamer-woocommerce-page container">
            <?php
        }
    }
    add_action('woocommerce_before_main_content', 'glamer_woocommerce_wrapper_before');

    if (!function_exists('glamer_woocommerce_wrapper_after')) {
        /**
         * After Content.
         *
         * Closes the wrapping divs.
         *
         * @return void
         */
        function glamer_woocommerce_wrapper_after() {
            ?>
            </div><!-- #primary -->
        </main><!-- #primary -->
    <?php
        }
    }
    add_action('woocommerce_after_main_content', 'glamer_woocommerce_wrapper_after');

    /**
     * Sample implementation of the WooCommerce Mini Cart.
     *
     * You can add the WooCommerce Mini Cart to header.php like so ...
     *
<?php
    if ( function_exists( 'glamer_woocommerce_header_cart' ) ) {
        glamer_woocommerce_header_cart();
    }
?>
     */

    if (!function_exists('glamer_woocommerce_cart_link_fragment')) {
        /**
         * Cart Fragments.
         *
         * Ensure cart contents update when products are added to the cart via AJAX.
         *
         * @param array $fragments Fragments to refresh via AJAX.
         * @return array Fragments to refresh via AJAX.
         */
        function glamer_woocommerce_cart_link_fragment($fragments) {
            ob_start();
            glamer_woocommerce_cart_link();
            $fragments['a.cart-contents'] = ob_get_clean();

            return $fragments;
        }
    }
    add_filter('woocommerce_add_to_cart_fragments', 'glamer_woocommerce_cart_link_fragment');

    if (!function_exists('glamer_woocommerce_cart_link')) {
        /**
         * Cart Link.
         *
         * Displayed a link to the cart including the number of items present and the cart total.
         *
         * @return void
         */
        function glamer_woocommerce_cart_link() {
    ?>
        <a class="cart-contents" href="<?php echo esc_url(wc_get_cart_url()); ?>" title="<?php esc_attr_e('View your shopping cart', 'glamer'); ?>">
            <span class="fas fa-shopping-cart"></span>
            <?php
            $item_count_text = sprintf(
                /* translators: number of items in the mini cart. */
                is_object(WC()->cart) ? WC()->cart->get_cart_contents_count() : ''
            );
            ?>
            <span class="count"><?php echo esc_html($item_count_text); ?></span>
        </a>
    <?php
        }
    }

    if (!function_exists('glamer_woocommerce_header_cart')) {
        /**
         * Display Header Cart.
         *
         * @return void
         */
        function glamer_woocommerce_header_cart() {
            if (is_cart()) {
                $class = 'current-menu-item';
            } else {
                $class = '';
            }
    ?>
        <div id="site-header-cart" class="glamer-hmini">
            <?php glamer_woocommerce_cart_link(); ?>
            <div class="glamer-mini-cart-items">
                <?php
                $instance = array(
                    'title' => '',
                );
                the_widget('WC_Widget_Cart', $instance);
                ?>
            </div>
        </div>
        <?php
        }
    }
    // Remove woocommerce defaults breadcrumb
    add_action('init', 'glamer_remove_wc_breadcrumbs');
    function glamer_remove_wc_breadcrumbs() {
        remove_action('woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0);
    }

    add_action('init', 'remove_ordering_result_count');
    function remove_ordering_result_count() {
        remove_action('woocommerce_before_shop_loop', 'woocommerce_result_count', 20, 0);
        remove_action('woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30, 0);
    }