<?php
/**
 * Kalium WordPress Theme
 *
 * Header template functions.
 *
 * @author Laborator
 * @link   https://kaliumtheme.com
 */
if ( ! defined( 'ABSPATH' ) ) {
	exit; // Direct access not allowed.
}

/**
 * Display header template.
 */
if ( ! function_exists( 'kalium_header_display' ) ) {

	function kalium_header_display() {
		if ( ! kalium_show_header() ) {
			return;
		}

		// Load header template
		get_template_part( 'tpls/header-main' );
	}
}


/**
 * Display header content.
 */
if ( ! function_exists( 'kalium_header_content_display' ) ) {

	function kalium_header_content_display() {

		// Legacy header types
		if ( 'custom-header' !== kalium_get_theme_option( 'main_menu_type' ) ) {
			remove_action( 'kalium_header_content_main', 'kalium_header_content_left', 10 );
			remove_action( 'kalium_header_content_after', 'kalium_header_content_below', 10 );

			add_filter( 'get_data_custom_header_content_right', '_kalium_header_process_legacy_header_types' );
		}

		// Include custom header template
		kalium_get_template( 'custom-header.php' );
	}
}

/**
 * Top header bar.
 */
if ( ! function_exists( 'kalium_header_top_bar_display' ) ) {

	function kalium_header_top_bar_display() {

		// Check if enabled
		if ( ! kalium_header_has_top_bar() ) {
			return;
		}

		// Content entries
		$content_left  = kalium_parse_content_builder_field( kalium_get_theme_option( 'top_header_bar_content_left' ) );
		$content_right = kalium_parse_content_builder_field( kalium_get_theme_option( 'top_header_bar_content_right' ) );

		// Do not display if no content is available
		if ( empty( $content_left['entries'] ) && empty( $content_right['entries'] ) ) {
			return;
		}

		// Alignment
		$content_left_alignment  = kalium_get_array_key( $content_left['options'], 'alignment' );
		$content_right_alignment = kalium_get_array_key( $content_right['options'], 'alignment' );

		// Skin classes
		$container_skin = kalium_get_theme_option( 'top_header_bar_skin' );
		$entries_skin   = kalium_get_theme_option( 'top_header_bar_default_skin' );

		// Responsive visibility
		$show_on = [
			'desktop' => boolval( kalium_get_theme_option( 'top_header_bar_support_desktop', true ) ),
			'tablet'  => boolval( kalium_get_theme_option( 'top_header_bar_support_tablet', false ) ),
			'mobile'  => boolval( kalium_get_theme_option( 'top_header_bar_support_mobile', false ) ),
		];

		// Content args
		$content_args = apply_filters( 'kalium_header_top_bar_content_args', [
			'default_skin' => $entries_skin,
			'menu_depth'   => 1,
		] );

		// Container classes
		$classes = [
			'top-header-bar',
		];

		// Container skin
		if ( in_array( $container_skin, [ 'light', 'dark' ] ) ) {
			$classes[] = 'top-header-bar--skin-' . $container_skin;
		}

		// Responsive
		foreach ( $show_on as $device_type => $visible ) {
			if ( ! $visible ) {
				$classes[] = 'top-header-bar--hide-on-' . $device_type;
			}
		}

		// Row container classes
		$row_container_classes = [
			'top-header-bar__row-container',
			'top-header-bar--row-container', // @deprecated
		];

		// Assign container when fullwidth header is not present
		if ( false === kalium_is_fullwidth_header() ) {
			$row_container_classes[] = 'container';
		}

		// Left column class
		$left_column_classes = [
			'top-header-bar__column',
			'top-header-bar__column--content-left',
			'top-header-bar--column', // @deprecated
			'top-header-bar--column-content-left', // @deprecated
		];

		if ( $content_left_alignment ) {
			$left_column_classes[] = 'top-header-bar__column--alignment-' . $content_left_alignment;
		}

		// Left column class
		$right_column_classes = [
			'top-header-bar__column',
			'top-header-bar__column--content-right',
			'top-header-bar--column', // @deprecated
			'top-header-bar--column-content-right', // @deprecated
		];

		if ( $content_right_alignment ) {
			$right_column_classes[] = 'top-header-bar__column--alignment-' . $content_right_alignment;
		}

		// Custom background and border color
		$custom_background_color = kalium_get_theme_option( 'top_header_bar_background_color' );
		$custom_border_color     = kalium_get_theme_option( 'top_header_bar_border_color' );
		$custom_separator_color  = kalium_get_theme_option( 'top_header_bar_separator_color' );

		if ( $custom_background_color || $custom_border_color ) {
			kalium_append_custom_css( '.top-header-bar', [
				'background-color' => $custom_background_color,
				'border-bottom'    => $custom_border_color ? sprintf( '1px solid %s', $custom_border_color ) : '0px',
			] );
		}

		// Separator
		if ( $custom_separator_color ) {
			$classes[] = 'top-header-bar--with-separators';

			kalium_append_custom_css( '.top-header-bar--with-separators .header-block__item:before', [
				'background-color' => $custom_separator_color,
			] );
		}
		?>
        <div <?php kalium_class_attr( $classes ); ?>>

            <div <?php kalium_class_attr( $row_container_classes ); ?>>

                <div class="top-header-bar__row top-header-bar--row">

					<?php if ( ! empty( $content_left['entries'] ) ): ?>
                        <div <?php kalium_class_attr( $left_column_classes ); ?>>
							<?php
							// Left content entries
							kalium_header_render_menu_content_entries( $content_left, $content_args );
							?>
                        </div>
					<?php endif; ?>

					<?php if ( ! empty( $content_right['entries'] ) ): ?>
                        <div <?php kalium_class_attr( $right_column_classes ); ?>>
							<?php
							// Right content entries
							kalium_header_render_menu_content_entries( $content_right, $content_args );
							?>
                        </div>
					<?php endif; ?>

                </div>

            </div>

        </div>
		<?php
	}
}

/**
 * Header left menu content (inline with the logo).
 */
if ( ! function_exists( 'kalium_header_content_left' ) ) {

	function kalium_header_content_left() {
		// Do not show if centered logo header is not selected
		if ( 'logo-centered' !== kalium_get_theme_option( 'custom_header_type' ) ) {
			return;
		}

		$menu_content = kalium_get_theme_option( 'custom_header_content_left' );
		$content      = kalium_parse_content_builder_field( $menu_content );

		$classes = [
			'header-block__column',
			'header-block--content-left',
		];

		// Alignment
		$classes[] = 'header-block--align-' . kalium_get_array_key( $content['options'], 'alignment', 'left' );

		?>
        <div <?php kalium_class_attr( $classes ); ?>>

            <div class="header-block__items-row">
				<?php
				// Render Content Entries
				kalium_header_render_menu_content_entries( $content );
				?>
            </div>

        </div>
		<?php

	}
}

/**
 * Centered header right menu content (inline with the logo).
 */
if ( ! function_exists( 'kalium_header_content_right' ) ) {

	function kalium_header_content_right() {
		$menu_content = kalium_get_theme_option( 'custom_header_content_right' );
		$content      = kalium_parse_content_builder_field( $menu_content );

		$classes = [
			'header-block__column',
			'header-block--content-right',
		];

		// Alignment
		$classes[] = 'header-block--align-' . kalium_get_array_key( $content['options'], 'alignment', 'right' );
		?>
        <div <?php kalium_class_attr( $classes ); ?>>

            <div class="header-block__items-row">
				<?php
				// Render Content Entries
				kalium_header_render_menu_content_entries( $content );
				?>
            </div>

        </div>
		<?php

	}
}

/**
 * Header content below the logo.
 */
if ( ! function_exists( 'kalium_header_content_below' ) ) {

	function kalium_header_content_below() {
		$menu_content = kalium_get_theme_option( 'custom_header_content' );
		$content      = kalium_parse_content_builder_field( $menu_content );

		// No entries found
		if ( empty( $content['entries'] ) ) {
			return;
		}

		$classes = [
			'header-block__column',
			'header-block--content-below',
		];

		// Alignment
		$classes[] = 'header-block--align-' . kalium_get_array_key( $content['options'], 'alignment', 'left' );

		?>
        <div class="header-block__row-container container">

            <div class="header-block__row header-block__row--secondary">

                <div <?php kalium_class_attr( $classes ); ?>>

                    <div class="header-block__items-row">
						<?php
						// Render Content Entries
						kalium_header_render_menu_content_entries( $content );
						?>
                    </div>

                </div>

            </div>

        </div>
		<?php

	}
}

/**
 * Centered header logo.
 */
if ( ! function_exists( 'kalium_header_content_logo' ) ) {

	function kalium_header_content_logo() {

		?>
        <div class="header-block__column header-block__logo header-block--auto-grow">
			<?php
			// Logo element
			kalium_logo_element();
			?>
        </div>
		<?php
	}
}

/**
 * Menu bars link.
 */
if ( ! function_exists( 'kalium_header_menu_bars_button' ) ) {

	function kalium_header_menu_bars_button( $action, $skin = '', $opts = [] ) {
		$opts = wp_parse_args( $opts, [
			'skin_default' => '',
			'skin_active'  => '',
			'attributes'   => [],
		] );

		$classes = [
			'toggle-bars',
		];

		if ( ! empty( $skin ) ) {
			$classes[] = $skin;
		}

		// Other attributes
		$atts = [
			'data-action="' . esc_attr( $action ) . '"',
		];

		if ( $opts['skin_default'] && $opts['skin_active'] ) {
			$atts[] = 'data-default-skin="' . esc_attr( $opts['skin_default'] ) . '"';
			$atts[] = 'data-active-skin="' . esc_attr( $opts['skin_active'] ) . '"';
		}

		foreach ( $opts['attributes'] as $attr_name => $attr_value ) {
			$atts[] = sprintf( '%1$s="%2$s"', $attr_name, esc_attr( $attr_value ) );
		}

		// Trigger action link
		echo sprintf( '<a href="#" class="%s" aria-label="Toggle navigation" role="button" %s>', kalium()->helpers->list_classes( $classes ), implode( ' ', $atts ) );

		// Icon or label
		kalium_menu_icon_or_label();

		echo '</a>';
	}
}

/**
 * Fullscreen Menu container.
 */
if ( ! function_exists( 'kalium_header_fullscreen_menu' ) ) {

	/**
	 * @param array $args {
	 *
	 * @type string $skin
	 * @type string $align
	 * @type bool   $footer_block
	 * @type bool   $translucent_background
	 * @type bool   $search_field
	 * @type bool   $submenu_dropdown_indicator
	 * @type array  $menu_args
	 * }
	 */
	function kalium_header_fullscreen_menu( $args = [] ) {
		if ( ! is_array( $args ) ) {
			$args = [];
		}

		$args = wp_parse_args( $args, [
			'skin'                       => kalium_get_theme_option( 'menu_full_bg_skin' ),
			'align'                      => kalium_get_theme_option( 'menu_full_bg_alignment' ),
			'footer_block'               => kalium_get_theme_option( 'menu_full_bg_footer_block' ),
			'translucent_background'     => kalium_get_theme_option( 'menu_full_bg_opacity' ),
			'search_field'               => kalium_get_theme_option( 'menu_full_bg_search_field' ),
			'submenu_dropdown_indicator' => kalium_get_theme_option( 'submenu_dropdown_indicator' ),
			'menu_args'                  => [],
		] );

		// Parse menu args
		$args['menu_args'] = wp_parse_args( $args['menu_args'], [
			'container'      => '',
			'echo'           => true,
			'theme_location' => 'main-menu',
		] );

		// Full bg menu classes
		$classes = [
			'fullscreen-menu',
			'full-screen-menu',
			'menu-open-effect-fade',
		];

		if ( ! empty( $args['skin'] ) ) {
			$classes[] = $args['skin'];
		}

		if ( $args['submenu_dropdown_indicator'] ) {
			$classes[] = 'submenu-indicator';
		}

		if ( 'centered-horizontal' === $args['align'] ) {
			$classes[] = 'menu-horizontally-center';
		}

		if ( in_array( $args['align'], [ 'centered', 'centered-horizontal' ] ) ) {
			$classes[] = 'menu-aligned-center';
		}

		if ( $args['footer_block'] ) {
			$classes[] = 'has-fullmenu-footer';
		}

		if ( $args['translucent_background'] ) {
			$classes[] = 'translucent-background';
		}
		?>
        <div <?php kalium_class_attr( $classes ); ?>>
            <div class="fullscreen-menu-navigation">
                <div class="container">
                    <nav>
						<?php
						// Navigation
						kalium_nav_menu( $args['menu_args'] );

						// Search field
						if ( $args['search_field'] ) : ?>
                            <form class="search-form" method="get" action="<?php echo esc_url( kalium_search_url() ); ?>" enctype="application/x-www-form-urlencoded">
                                <input id="full-bg-search-inp" type="search" class="search-field" value="<?php echo get_search_query(); ?>" name="s" autocomplete="off"/>
                                <label for="full-bg-search-inp">
									<?php
									// Search placeholder
									printf( '%s %s', esc_html__( 'Search', 'kalium' ), '<span><i></i><i></i><i></i></span>' );
									?>
                                </label>
                            </form>
						<?php endif; ?>
                    </nav>
                </div>
            </div>

			<?php if ( $args['footer_block'] ) : ?>
                <div class="fullscreen-menu-footer">
                    <div class="container">
                        <div class="right-part">
							<?php echo do_shortcode( '[lab_social_networks rounded]' ); ?>
                        </div>
                        <div class="left-part">
							<?php echo do_shortcode( kalium_get_theme_option( 'footer_text' ) ); ?>
                        </div>
                    </div>
                </div>
			<?php endif; ?>

        </div>
		<?php
	}
}

/**
 * Header search field.
 */
if ( ! function_exists( 'kalium_header_search_field' ) ) {

	function kalium_header_search_field( $args = [] ) {
		$args = wp_parse_args( $args, [
			'skin'             => '',
			'align'            => '',
			'input_visibility' => '',
		] );

		// Split text plugin is required
		kalium_enqueue( 'gsap-splittext-js' );

		// Classes
		$classes = [
			'header-search-input',
		];

		// Skin class
		if ( ! empty( $args['skin'] ) ) {
			$classes[] = $args['skin'];
		}

		// Right aligned
		if ( 'right' === $args['align'] ) {
			$classes[] = 'header-search-input--align-right';
		}

		// Search input visibility
		if ( 'visible' === $args['input_visibility'] ) {
			$classes[] = 'header-search-input--input-visible';
		}

		$animation = kalium_get_theme_option( 'header_search_field_icon_animation' );
		?>
        <div <?php kalium_class_attr( $classes ); ?>>
            <form role="search" method="get" action="<?php echo esc_url( kalium_search_url() ); ?>">
                <div class="search-field">
                    <span><?php esc_html_e( 'Search site...', 'kalium' ); ?></span>
                    <input type="search" value="" autocomplete="off" name="s"/>
                </div>

                <div class="search-icon">
                    <a href="#" data-animation="<?php echo $animation; ?>" aria-label="Search site">
						<?php echo kalium_get_svg_file( 'assets/images/icons/search.svg', null, [ 24, 24 ] ); ?>
                    </a>
                </div>

				<?php
				// Lang attribute
				if ( kalium()->request->has( 'lang' ) ) {
					echo sprintf( '<input type="hidden" name="lang" value="%s" />', esc_attr( kalium()->request->query( 'lang' ) ) );
				}
				?>
            </form>

        </div>
		<?php
	}
}

/**
 * Show Menu Bar (hambuger icon).
 */
if ( ! function_exists( 'kalium_menu_icon_or_label' ) ) {

	function kalium_menu_icon_or_label() {
		$menu_hamburger_custom_label = kalium_get_theme_option( 'menu_hamburger_custom_label' );

		if ( $menu_hamburger_custom_label ) {

			$label_show_text  = kalium_get_theme_option( 'menu_hamburger_custom_label_text' );
			$label_close_text = kalium_get_theme_option( 'menu_hamburger_custom_label_close_text' );
			$icon_position    = kalium_get_theme_option( 'menu_hamburger_custom_icon_position', 'left' );
			$text_only        = 'hide' === $icon_position;

			$classes = [
				'toggle-bars__column',
				'toggle-bars__column--' . kalium_conditional( 'right' === $icon_position, 'left', 'right' ),
			];

			if ( ! $text_only ) {
				$classes[] = 'toggle-bars__column--padding-' . kalium_conditional( 'left' === $icon_position, 'left', 'right' );
			}
			?>
            <span <?php kalium_class_attr( $classes ); ?>>
                <span class="toggle-bars__text toggle-bars__text--show"><?php echo esc_html( $label_show_text ); ?></span>
                <span class="toggle-bars__text toggle-bars__text--hide"><?php echo esc_html( $label_close_text ); ?></span>
            </span>
			<?php

			if ( $text_only ) {
				return;
			}
		}

		// Bars
		?>
        <span class="toggle-bars__column">
            <span class="toggle-bars__bar-lines">
                <span class="toggle-bars__bar-line toggle-bars__bar-line--top"></span>
                <span class="toggle-bars__bar-line toggle-bars__bar-line--middle"></span>
                <span class="toggle-bars__bar-line toggle-bars__bar-line--bottom"></span>
            </span>
        </span>
		<?php
	}
}

/**
 * Display mobile menu.
 */
if ( ! function_exists( 'kalium_header_display_mobile_menu' ) ) {

	function kalium_header_display_mobile_menu() {
		if ( ! kalium_show_header() ) {
			return;
		}

		// Mobile menu
		get_template_part( 'tpls/menu-mobile' );
	}
}

/**
 * Display header top menu.
 */
if ( ! function_exists( 'kalium_header_display_top_menu' ) ) {

	function kalium_header_display_top_menu() {
		if ( ! kalium_show_header() ) {
			return;
		}

		// Menu type to use
		$main_menu_type = kalium_get_theme_option( 'main_menu_type' );

		// Top menu
		if ( 'top-menu' === $main_menu_type || kalium_get_theme_option( 'menu_top_force_include' ) || kalium_header_has_content_element_type( 'top-menu' ) ) {
			get_template_part( 'tpls/menu-top' );
		}
	}
}

/**
 * Display header side menu.
 */
if ( ! function_exists( 'kalium_header_display_side_menu' ) ) {

	function kalium_header_display_side_menu() {
		if ( ! kalium_show_header() ) {
			return;
		}

		// Menu type to use
		$main_menu_type = kalium_get_theme_option( 'main_menu_type' );

		// Sidebar menu
		if ( 'sidebar-menu' === $main_menu_type || kalium_get_theme_option( 'menu_sidebar_force_include' ) || kalium_header_has_content_element_type( 'sidebar-menu' ) ) {
			get_template_part( 'tpls/menu-sidebar' );
		}
	}
}
