<?php
/* WooCommerce skin-specific functions
------------------------------------------------------------------------------- */


/* Skin-specific WooCommerce utils
------------------------------------------------------------------- */

// Theme init priorities:
// 3 - add/remove Theme Options elements
if ( ! function_exists( 'law_office_woocommerce_skin_theme_setup3' ) ) {
	add_action( 'after_setup_theme', 'law_office_woocommerce_skin_theme_setup3', 3 );
	function law_office_woocommerce_skin_theme_setup3() {
		if ( law_office_exists_woocommerce() ) {
			// Panel 'Shop' with skin-specific options
			// Add color_sheme
			law_office_storage_set_array_after( 'options', 'shop_general', law_office_options_get_list_cpt_options_color( 'shop', esc_html__( 'Product', 'law-office' ) ) );
			// Hide 'shop_mode'
			law_office_storage_set_array2( 'options', 'shop_mode', 'type', 'hidden' );
			// Hide 'single_product_gallery_thumbs'
			law_office_storage_set_array2( 'options', 'single_product_gallery_thumbs', 'std', 'left' );
			law_office_storage_set_array2( 'options', 'single_product_gallery_thumbs', 'type', 'hidden' );
			// Remove hover 'shop_buttons'
			law_office_storage_set_array2( 'options', 'shop_hover', 'std', 'shop' );
			law_office_storage_set_array2( 'options', 'shop_hover', 'options', apply_filters( 'law_office_filter_shop_hover', array(
				'none' => esc_html__( 'None', 'law-office' ),
				'shop' => esc_html__( 'Icons', 'law-office' ),
				)
			) );
		}
	}
}


// Theme init priorities:
// Remove\Register Action\filters
if ( ! function_exists( 'law_office_woocommerce_skin_woocommerce_remove_action' ) ) {
    add_action( 'init', 'law_office_woocommerce_skin_woocommerce_remove_action', 11 );
    function law_office_woocommerce_skin_woocommerce_remove_action() {
        if ( law_office_exists_woocommerce() ) {

            remove_action( 'woocommerce_sale_flash', 'law_office_woocommerce_add_sale_percent', 10 );

            remove_action( 'woocommerce_get_price_html', 'law_office_woocommerce_get_price_html' );

            remove_action( 'woocommerce_loop_add_to_cart_link', 'law_office_woocommerce_add_to_cart_link', 10 );
			add_filter( 'woocommerce_loop_add_to_cart_link', 'law_office_woocommerce_skin_add_to_cart_link', 10, 2 );

			remove_action( 'woocommerce_before_shop_loop', 'law_office_woocommerce_before_shop_loop', 10 );

			remove_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5);
			add_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 30);

			add_action( 'woocommerce_product_thumbnails', 'law_office_woocommerce_add_wishlist', 21 );

			remove_action('woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10);
			add_action('woocommerce_single_product_summary', 'woocommerce_show_product_sale_flash', 4);

			// Status Bar
			add_action('woocommerce_before_cart', 'woocommerce_show_product_status_bar');
			add_action('woocommerce_before_checkout_form', 'woocommerce_show_product_status_bar');
			add_action('woocommerce_before_thankyou', 'woocommerce_show_product_status_bar');
		}
	}
}


// Theme init priorities:
// Action 'wp'
// 1 - detect override mode. Attention! Only after this step you can use overriden options (separate values for the shop, courses, etc.)
if ( ! function_exists( 'law_office_woocommerce_skin_setup_wp' ) ) {
	add_action( 'wp', 'law_office_woocommerce_skin_setup_wp' );
	function law_office_woocommerce_skin_setup_wp() {
		if ( law_office_exists_woocommerce() ) {
			if ( is_product() && law_office_get_theme_option( 'single_product_layout' ) == 'stretched' ) {
				remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0 );
				add_action( 'woocommerce_single_product_summary', 'woocommerce_breadcrumb', 3 );
			}
		}
	}
}


if ( ! function_exists( 'woocommerce_show_product_status_bar' ) ) {
	function woocommerce_show_product_status_bar() {
		if (is_cart() || is_checkout()) { ?>
			<div class="woocommerce_status_bar">
				<div class="bar_cart active"><span class="num">1</span><?php esc_html_e('Shopping Cart', 'law-office'); ?></div>
				<div class="bar_payment<?php echo esc_attr(is_checkout() ? ' active': ''); ?>"><span class="num">2</span><?php esc_html_e('Payment & Delivery Options', 'law-office'); ?></div>
				<div class="bar_order"><span class="num">3</span><?php esc_html_e('Order Received', 'law-office'); ?></div>
			</div>
		<?php
		}
	}
}


// Add WooCommerce-specific classes to the body
if ( ! function_exists( 'law_office_woocommerce_skin_add_body_classes' ) ) {
	add_filter( 'body_class', 'law_office_woocommerce_skin_add_body_classes' );
	function law_office_woocommerce_skin_add_body_classes( $classes ) {
		if ( is_product() ) {
			$classes[] = 'single_product_layout_' . law_office_get_theme_option( 'single_product_layout' );
		}
		return $classes;
	}
}


// Show/Hide title
if ( ! function_exists( 'law_office_woocommerce_skin_show_title' ) ) {
	add_filter( 'law_office_filter_show_woocommerce_title', 'law_office_woocommerce_skin_show_title' );
	function law_office_woocommerce_skin_show_title( $show ) {
		$tpl = law_office_storage_get('extended_products_tpl');
		if ( !empty($tpl) && ('info' == $tpl || 'info_2' == $tpl) ) {
			$show = true;
		} else {
			$show = false;
		}
		return $show;
	}
}


// Wrap 'Add to cart' button
if ( ! function_exists( 'law_office_woocommerce_skin_add_to_cart_link' ) ) {
	//Handler of the add_filter( 'woocommerce_loop_add_to_cart_link', 'law_office_woocommerce_skin_add_to_cart_link', 10, 2 );
	function law_office_woocommerce_skin_add_to_cart_link( $html, $product = false, $args = array() ) {
		$tpl = law_office_storage_get('extended_products_tpl');
		if ( isset($tpl) && 'simple' == $tpl ) {
			return sprintf( '<div class="add_to_cart_wrap">%s</div>', $html );
		} else if (isset($tpl) && 'hovered' == $tpl)  {
			return false;
		} else {
			return law_office_is_off( law_office_get_theme_option( 'shop_hover' ) ) ? sprintf( '<div class="add_to_cart_wrap">%s</div>', $html ) : $html;
		}
	}
}


if ( ! function_exists( 'law_office_woocommerce_add_wishlist' ) ) {
	function law_office_woocommerce_add_wishlist() {
		if (function_exists('law_office_exists_wishlist') && law_office_exists_wishlist()) {
			law_office_show_layout(do_shortcode("[ti_wishlists_addtowishlist]"));
		}
	}
}


/* Add parameter 'Product style' to the shop page settings
------------------------------------------------------------------- */

// Theme init priorities:
// 3 - add/remove Theme Options elements
if ( ! function_exists( 'law_office_woocommerce_extensions_add_product_style_theme_setup3' ) ) {
	add_action( 'after_setup_theme', 'law_office_woocommerce_extensions_add_product_style_theme_setup3', 3 );
	function law_office_woocommerce_extensions_add_product_style_theme_setup3() {
		if ( law_office_exists_woocommerce() ) {
			// Add parameter to the theme-specific options
			law_office_storage_set_array_after( 'options', 'shop_mode', apply_filters( 'law_office_filter_woocommerce_extensions_add_product_style_args', array(
				'product_style' => array(
					'title'      => esc_html__( 'Product style', 'law-office' ),
					'desc'       => wp_kses_data( __( 'Style of product items on the shop page.', 'law-office' ) ),
					'std'     => 'default',
					'options' => array(),
					'type'    => 'select',
				),
			) ) );
		}
	}
}


// Return lists with choises when its need in the admin mode
if ( ! function_exists( 'law_office_woocommerce_extensions_add_product_style_get_list_choises' ) ) {
	add_filter( 'law_office_filter_options_get_list_choises', 'law_office_woocommerce_extensions_add_product_style_get_list_choises', 10, 2 );
	function law_office_woocommerce_extensions_add_product_style_get_list_choises( $list, $id ) {
		if ( is_array( $list ) && count( $list ) == 0 ) {
			if ( strpos( $id, 'product_style' ) === 0 && function_exists( 'trx_addons_woocommerce_extended_products_get_list_styles' ) ) {
				$list = trx_addons_woocommerce_extended_products_get_list_styles();
			}
		}
		return $list;
	}
}


// Substitute default template in the products loop with selected in Theme Options
if ( ! function_exists( 'law_office_woocommerce_extensions_add_product_style_wc_get_template_part' ) ) {
	add_filter( 'wc_get_template_part', 'law_office_woocommerce_extensions_add_product_style_wc_get_template_part', 200, 3 );
	function law_office_woocommerce_extensions_add_product_style_wc_get_template_part( $template, $slug, $name ) {
		if ( $slug == 'content' && $name == 'product'
			&& function_exists( 'trx_addons_woocommerce_extended_products_get_layouts' )
			&& ( ! function_exists( 'trx_addons_sc_stack_check' ) || ! trx_addons_sc_stack_check( 'trx_sc_extended_products' ) )
			&& ! is_product()
		) {
			$style = law_office_get_theme_option( 'product_style' );
			if ( 'default' != $style ) {
				$layouts = trx_addons_woocommerce_extended_products_get_layouts();
				if ( isset( $layouts[ $style ] ) && ! empty( $layouts[ $style ]['template'] ) ) {
					$template = $layouts[ $style ]['template'];
				}
			}
		}
		return $template;
	}
}


// add products layouts
if ( !function_exists( 'law_office_add_woocommerce_products_layouts' ) ) {
	add_filter('trx_addons_filter_woocommerce_products_layouts', 'law_office_add_woocommerce_products_layouts');
	function law_office_add_woocommerce_products_layouts() {
		$arr = array(
				'default' => array(
					'title' => esc_html__( 'Default', 'law-office' ),
					'template' => ''
				),
				'centered' => array(
					'title' => esc_html__( 'Centered', 'law-office' ),
					'template' => ''
				),
		);
		return $arr;
	}
}


// Add class with a "product style" to the wrap ul.products
// ( if we are not inside a shortcode 'trx_sc_extended_products' )
if ( ! function_exists( 'law_office_woocommerce_extensions_add_product_style_to_products_wrap' ) ) {
	add_filter( 'woocommerce_product_loop_start', 'law_office_woocommerce_extensions_add_product_style_to_products_wrap', 200, 1 );
	function law_office_woocommerce_extensions_add_product_style_to_products_wrap( $template ) {
		if ( function_exists( 'trx_addons_woocommerce_extended_products_get_layouts' )
			&& ( ! function_exists( 'trx_addons_sc_stack_check' ) || ! trx_addons_sc_stack_check( 'trx_sc_extended_products' ) )
			&& ! is_product()	// To prevent add class for the wrap of related products in the single product page
		) {
			$style = law_office_get_theme_option( 'product_style' );
			$new_classes = array(
				sprintf( 'products_style_%s', $style )
			);
			$layouts = trx_addons_woocommerce_extended_products_get_layouts();
			if ( isset( $layouts[ $style ] ) && ! empty( $layouts[ $style ]['products_classes'] ) ) {
				$new_classes = array_merge(
									$new_classes, 
									is_array( $layouts[ $style ]['products_classes'] )
										? $layouts[ $style ]['products_classes']
										: explode( ' ', $layouts[ $style ]['products_classes'] )
									);
			}
			$template = preg_replace( 
									'/(<ul[^>]*class="products )/',
									'$1' . esc_attr( join( ' ', $new_classes ) ) . ' ',
									$template
									);
		}
		return $template;
	}
}


// Add class with a "product style" to each product item
if ( ! function_exists( 'law_office_woocommerce_extensions_add_product_style_to_product_items' ) ) {
	add_filter( 'woocommerce_post_class', 'law_office_woocommerce_extensions_add_product_style_to_product_items', 200, 2 );
	function law_office_woocommerce_extensions_add_product_style_to_product_items( $classes, $product ) {
		if ( function_exists( 'trx_addons_woocommerce_extended_products_get_layouts' )
			&& ( ! function_exists( 'trx_addons_sc_stack_check' ) || ! trx_addons_sc_stack_check( 'trx_sc_extended_products' ) )
			&& ! is_product()	// To prevent add class for the wrap of related products in the single product page
		) {
			if ( is_array( $classes ) ) {
				$style = law_office_get_theme_option( 'product_style' );
				$new_classes = array(
									sprintf( 'product_style_%s', esc_attr( $style ) )
								);
				$layouts = trx_addons_woocommerce_extended_products_get_layouts();
				if ( isset( $layouts[ $style ] ) && ! empty( $layouts[ $style ]['product_classes'] ) ) {
					$new_classes = array_merge(
										$new_classes, 
										is_array( $layouts[ $style ]['product_classes'] )
											? $layouts[ $style ]['product_classes']
											: explode( ' ', $layouts[ $style ]['product_classes'] )
										);
				}
				foreach( $new_classes as $c ) {
					$c = trim( $c );
					if ( ! empty( $c ) && ! in_array( $c, $classes ) ) {
						$classes[] = $c;
					}
				}
			}
		}
		return $classes;
	}
}