<?php

global $_chosen_attributes, $wpdb, $wp;

if (!is_post_type_archive('product') && !is_tax(get_object_taxonomies('product')))
	return;

if (sizeof(WC()->query->unfiltered_product_ids) == 0)
	return; // None shown - return

$min_price = isset($_GET['min_price']) ? esc_attr($_GET['min_price']) : '';
$max_price = isset($_GET['max_price']) ? esc_attr($_GET['max_price']) : '';

wp_enqueue_script( MAD_PREFIX . 'wc-price-slider-mod' );

// Remember current filters/search
$fields = '';

if (get_search_query())
	$fields .= '<input type="hidden" name="s" value="' . get_search_query() . '" />';

if (!empty($_GET['post_type']))
	$fields .= '<input type="hidden" name="post_type" value="' . esc_attr($_GET['post_type']) . '" />';

if (!empty ($_GET['product_cat']))
	$fields .= '<input type="hidden" name="product_cat" value="' . esc_attr($_GET['product_cat']) . '" />';

if (!empty($_GET['product_tag']))
	$fields .= '<input type="hidden" name="product_tag" value="' . esc_attr($_GET['product_tag']) . '" />';

if (!empty($_GET['orderby']))
	$fields .= '<input type="hidden" name="orderby" value="' . esc_attr($_GET['orderby']) . '" />';

if ($_chosen_attributes) foreach ($_chosen_attributes as $attribute => $data) {

	$taxonomy_filter = 'filter_' . str_replace('pa_', '', $attribute);

	$fields .= '<input type="hidden" name="' . esc_attr($taxonomy_filter) . '" value="' . esc_attr(implode(',', $data['terms'])) . '" />';

	if ($data['query_type'] == 'or')
		$fields .= '<input type="hidden" name="' . esc_attr(str_replace('pa_', 'query_type_', $attribute)) . '" value="or" />';
}

$min = $max = 0;
$post_min = $post_max = '';

if (sizeof(WC()->query->layered_nav_product_ids) === 0) {
	$min = floor($wpdb->get_var(
		$wpdb->prepare('
						SELECT min(meta_value + 0)
						FROM %1$s
						LEFT JOIN %2$s ON %1$s.ID = %2$s.post_id
						WHERE ( meta_key = \'%3$s\' OR meta_key = \'%4$s\' )
						AND meta_value != ""
					', $wpdb->posts, $wpdb->postmeta, '_price', '_min_variation_price')
	));
	$max = ceil($wpdb->get_var(
		$wpdb->prepare('
						SELECT max(meta_value + 0)
						FROM %1$s
						LEFT JOIN %2$s ON %1$s.ID = %2$s.post_id
						WHERE meta_key = \'%3$s\'
					', $wpdb->posts, $wpdb->postmeta, '_price')
	));
} else {
	$min = floor($wpdb->get_var(
		$wpdb->prepare('
						SELECT min(meta_value + 0)
						FROM %1$s
						LEFT JOIN %2$s ON %1$s.ID = %2$s.post_id
						WHERE ( meta_key =\'%3$s\' OR meta_key =\'%4$s\' )
						AND meta_value != ""
						AND (
							%1$s.ID IN (' . implode(',', array_map('absint', WC()->query->layered_nav_product_ids)) . ')
							OR (
								%1$s.post_parent IN (' . implode(',', array_map('absint', WC()->query->layered_nav_product_ids)) . ')
								AND %1$s.post_parent != 0
							)
						)
					', $wpdb->posts, $wpdb->postmeta, '_price', '_min_variation_price'
		)));
	$max = ceil($wpdb->get_var(
		$wpdb->prepare('
						SELECT max(meta_value + 0)
						FROM %1$s
						LEFT JOIN %2$s ON %1$s.ID = %2$s.post_id
						WHERE meta_key =\'%3$s\'
						AND (
							%1$s.ID IN (' . implode(',', array_map('absint', WC()->query->layered_nav_product_ids)) . ')
							OR (
								%1$s.post_parent IN (' . implode(',', array_map('absint', WC()->query->layered_nav_product_ids)) . ')
								AND %1$s.post_parent != 0
							)
						)
					', $wpdb->posts, $wpdb->postmeta, '_price'
		)));
}

if ($min == $max)
	return;

if (get_option('permalink_structure') == '')
	$form_action = remove_query_arg(array('page', 'paged'), add_query_arg($wp->query_string, '', home_url($wp->request)));
else
	$form_action = preg_replace('%\/page/[0-9]+%', '', home_url($wp->request));

echo '<form method="get" action="' . esc_attr($form_action) . '">
		<div class="price_slider_wrapper">
			<div class="price_label clearfix" style="display:none;">
				<span>' . esc_html__('Range', MAD_BASE_TEXTDOMAIN) . ': </span><span class="from"></span> - <span class="to"></span>
			</div>
			<div class="price_slider" style="display:none;"></div>
			<div class="price_slider_amount">
				<input type="text" id="min_price" name="min_price" value="' . esc_attr($min_price) . '" data-min="' . esc_attr(apply_filters('woocommerce_price_filter_widget_amount', $min)) . '" placeholder="' . esc_html__('Min price', 'woocommerce') . '" />
				<input type="text" id="max_price" name="max_price" value="' . esc_attr($max_price) . '" data-max="' . esc_attr(apply_filters('woocommerce_price_filter_widget_amount', $max)) . '" placeholder="' . esc_html__('Max price', 'woocommerce') . '" />
				' . $fields . '
				<div class="clear"></div>
			</div>
		</div>
	</form>';