<?php

use DgoraWcas\Helpers;

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

add_action( 'init', function () {
	$headerSource = thegem_get_option( 'header_source', 'default' );
	// Built-in Header.
	if ( $headerSource === 'default' ) {
		// Header Vertical
		remove_filter( 'wp_nav_menu_items', 'thegem_menu_item_search', 10, 2 );
		add_filter( 'wp_nav_menu_items', function ( $items, $args ) {
			if ( $args->theme_location == 'primary' && ! thegem_get_option( 'hide_search_icon' ) ) {
				$items .= '<li class="menu-item menu-item-search dgwt-wcas-thegem-menu-search">';
				$items .= do_shortcode( '[fibosearch layout="icon"]' );
				$items .= '</li>';
			}

			return $items;
		}, 10, 2 );

		// Header Fullwidth hamburger
		remove_filter( 'wp_nav_menu_items', 'thegem_menu_item_hamburger_widget', 100, 2 );
		add_action( 'thegem_before_nav_menu', function () {
			if ( in_array( thegem_get_option( 'header_layout' ), array(
				'perspective',
				'fullwidth_hamburger',
				'overlay'
			) ) ) {
				echo do_shortcode( '[fibosearch]' );
			}
		} );

		// Perspective header
		remove_filter( 'get_search_form', 'thegem_serch_form_vertical_header' );
		add_action( 'thegem_perspective_menu_buttons', function () {
			echo do_shortcode( '[fibosearch]' );
		} );

		// Remove the search bar from vertical header
		add_filter( 'get_search_form', function ( $form ) {
			if ( in_array( thegem_get_option( 'header_layout' ), array( 'fullwidth_hamburger', 'vertical' ) ) ) {
				$form = '';
			}

			return $form;
		}, 100 );

		add_action( 'thegem_before_header', function () {
			if ( ! in_array( thegem_get_option( 'header_layout' ), array( 'vertical' ) ) ) {
				return;
			}

			$html = '<div class="dgwt-wcas-thegem-vertical-search">';
			$html .= do_shortcode( '[fibosearch]' );
			$html .= '</div>';

			echo $html;
		}, 20 );

		// Force enable overlay for mobile search
		add_filter( 'dgwt/wcas/settings/load_value/key=enable_mobile_overlay', function () {
			return 'on';
		} );
	} else {
		// Header Builder.
		function dgwtWcasTheGemGetCustomCss( $atts, $uniqid ) {
			$defaultAtts = [
				'desktop_disable' => '',
				'tablet_disable'  => '',
				'mobile_disable'  => '',
			];
			if ( function_exists( 'thegem_templates_extra_options_extract' ) && function_exists( 'thegem_templates_design_options_extract' ) ) {
				$defaultAtts = array_merge( thegem_templates_extra_options_extract(), thegem_templates_design_options_extract() );
			}
			$atts = wp_parse_args( $atts, $defaultAtts );

			return thegem_templates_element_design_options( $uniqid, '.dgwt-wcas-search-wrapp', $atts );
		}

		add_shortcode( 'thegem_te_search_form', function ( $atts, $content, $shortcodeTag ) {
			$uniqid = uniqid( 'thegem-custom-' ) . rand( 1, 9999 );

			$customCss = dgwtWcasTheGemGetCustomCss( $atts, $uniqid );
			$cssOutput = empty( $customCss ) ? '' : '<style>' . $customCss . '</style>';

			return $cssOutput . do_shortcode( '[fibosearch layout="classic" class="' . $uniqid . '"]' );
		} );

		add_shortcode( 'thegem_te_search', function ( $atts, $content, $shortcodeTag ) {
			$uniqid = uniqid( 'thegem-custom-' ) . rand( 1, 9999 );

			$customCss = dgwtWcasTheGemGetCustomCss( $atts, $uniqid );

			if ( isset( $atts['icon_size'] ) ) {
				$customCss .= ".$uniqid .dgwt-wcas-ico-magnifier, .$uniqid .dgwt-wcas-ico-magnifier-handler{max-height:" . $atts['icon_size'] . "px;}";
			}

			if ( isset( $atts['icon_color_normal'] ) ) {
				$customCss .= ".$uniqid .dgwt-wcas-ico-magnifier, .$uniqid .dgwt-wcas-ico-magnifier-handler{fill:" . $atts['icon_color_normal'] . ";}";
			}

			if ( isset( $atts['icon_color_hover'] ) ) {
				$customCss .= ".$uniqid:hover .dgwt-wcas-ico-magnifier, .$uniqid:hover .dgwt-wcas-ico-magnifier-handler{fill:" . $atts['icon_color_hover'] . ";}";
			}

			$cssOutput = empty( $customCss ) ? '' : '<style>' . $customCss . '</style>';

			return $cssOutput . do_shortcode( '[fibosearch layout="icon" class="' . $uniqid . '"]' );
		} );
	}
} );

/**
 * Forcing our engine to run when WooCommerce >> Shop grid >> Layout Type is "Products Grid".
 */
add_filter( 'dgwt/wcas/helpers/is_search_query', function ( $enabled, $query ) {
	if (
		$query->get( 'post_type' ) &&
		is_string( $query->get( 'post_type' ) ) &&
		$query->get( 'post_type' ) === 'product' &&
		is_string( $query->get( 's' ) ) &&
		strlen( $query->get( 's' ) ) > 0 &&
		Helpers::isRunningInsideFunction( 'thegem_extended_products_get_posts', 25 )
	) {
		$enabled = true;
	}

	return $enabled;
}, 10, 2 );


add_action( 'wp_head', function () {
	$headerSource = thegem_get_option( 'header_source', 'default' );
	$color        = thegem_get_option( 'main_menu_level1_color' );
	$colorHover   = thegem_get_option( 'main_menu_level1_hover_color' );
	$mobileColor  = thegem_get_option( 'mobile_menu_level1_color' );
	// Built-in Header.
	if ( $headerSource === 'default' ) {
		?>
		<style>
			.dgwt-wcas-thegem-menu-search .dgwt-wcas-search-wrapp {
				margin-left: 10px;
				margin-right: 10px;
			}

			.dgwt-wcas-thegem-menu-search .dgwt-wcas-ico-magnifier-handler {
				max-width: 19px;
			}

			.dgwt-wcas-thegem-menu-search .dgwt-wcas-search-icon path {
				fill: <?php echo $color; ?>;
			}

			.dgwt-wcas-thegem-menu-search .dgwt-wcas-search-icon:hover path {
				fill: <?php echo $colorHover; ?>;
			}

			#primary-navigation.responsive .dgwt-wcas-thegem-menu-search .dgwt-wcas-search-icon path {
				fill: <?php echo $mobileColor; ?>;
			}

			#primary-navigation.responsive .dgwt-wcas-thegem-menu-search {
				padding: 16px 20px;
			}

			.header-layout-perspective > .dgwt-wcas-search-wrapp {
				top: 30px;
				position: absolute;
				max-width: 600px;
				left: 270px;
				right: auto;
				margin: 0 auto;
				z-index: 10;
			}

			@media (max-width: 979px) {
				.header-layout-fullwidth_hamburger #primary-navigation > .dgwt-wcas-search-wrapp,
				.header-layout-perspective > .dgwt-wcas-search-wrapp {
					max-width: 350px;
				}

				.header-style-vertical #site-header-wrapper .dgwt-wcas-thegem-vertical-search {
					display: none;
				}
			}

			@media (max-width: 769px) {
				.header-layout-fullwidth_hamburger #primary-navigation > .dgwt-wcas-search-wrapp,
				.header-layout-overlay .primary-navigation.responsive .overlay-menu-cell > .dgwt-wcas-search-wrapp,
				.header-layout-perspective > .dgwt-wcas-search-wrapp {
					display: none !important;
				}
			}

			#page.vertical-header .dgwt-wcas-thegem-vertical-search {
				margin-right: auto;
				margin-left: auto;
				padding-left: 21px;
				padding-right: 21px;
			}

			.header-layout-fullwidth_hamburger #primary-navigation > .dgwt-wcas-search-wrapp {
				top: 30px;
				position: absolute;
				left: 150px;
				max-width: 600px;

				-webkit-transition: all .3s, transform 1s;
				transition: all .3s, transform 1s;
				-webkit-transform: translateX(0);
				transform: translateX(0);
			}

			@media (max-width: 979px) {
				.header-layout-fullwidth_hamburger #primary-navigation > .dgwt-wcas-search-wrapp {
					top: 12px;
				}
			}

			.header-layout-fullwidth_hamburger #primary-navigation.hamburger-active > .dgwt-wcas-search-wrapp {
				-moz-transform: translateX(-450px);
				-webkit-transform: translateX(-450px);
				transform: translateX(-450px);
			}

			.site-header.fixed .header-layout-fullwidth_hamburger #primary-navigation > .dgwt-wcas-search-wrapp,
			.site-header.fixed .header-layout-perspective > .dgwt-wcas-search-wrapp {
				top: 4px;
			}

			.site-header.fixed .header-layout-fullwidth_hamburger #primary-navigation > .dgwt-wcas-search-wrapp {
				left: 80px;
			}

			@media (max-width: 979px) {
				.header-layout-perspective > .dgwt-wcas-search-wrapp {
					top: 10px;
				}
			}

			@media (max-width: 1212px) and (min-width: 980px) {
				.header-layout-perspective #perspective-menu-buttons {
					padding-bottom: 30px;
				}

				.header-layout-perspective > .dgwt-wcas-search-wrapp {
					top: 110px;
				}
			}
		</style>
		<?php
	} else {
		// Header Builder.
		?>
		<style>
			.thegem-template-header .dgwt-wcas-search-wrapp.dgwt-wcas-layout-classic {
				max-width: 300px;
				margin: 0;
			}

			.thegem-template-header .dgwt-wcas-search-wrapp.dgwt-wcas-layout-icon {
				max-width: 300px;
			}
		</style>
		<?php
	}
} );
