<?php
/**
 * Custom page walker for this theme.
 *
 * @package OTT Vlogger
 */

if (!class_exists('OTT_Vlogger_Walker_Page')) {
    /**
     * CUSTOM PAGE WALKER
     * A custom walker for pages.
     */
    class OTT_Vlogger_Walker_Page extends Walker_Page
    {

        /**
         * Outputs the beginning of the current element in the tree.
         *
         * @param string $ott_vlogger_output Used to append additional content. Passed by reference.
         * @param WP_Post $page Page data object.
         * @param int $ott_vlogger_depth Optional. Depth of page. Used for padding. Default 0.
         * @param array $ott_vlogger_args Optional. Array of arguments. Default empty array.
         * @param int $current_page Optional. Page ID. Default 0.
         * @since 2.1.0
         *
         * @see Walker::start_el()
         */

        public function start_lvl( &$ott_vlogger_output, $ott_vlogger_depth = 0, $ott_vlogger_args = array() ) {
            $ott_vlogger_indent  = str_repeat( "\t", $ott_vlogger_depth );
            $ott_vlogger_output .= "$ott_vlogger_indent<ul class='sub-menu'>\n";
        }

        public function start_el(&$ott_vlogger_output, $page, $ott_vlogger_depth = 0, $ott_vlogger_args = array(), $current_page = 0)
        {

            if (isset($ott_vlogger_args['item_spacing']) && 'preserve' === $ott_vlogger_args['item_spacing']) {
                $t = "\t";
                $n = "\n";
            } else {
                $t = '';
                $n = '';
            }
            if ($ott_vlogger_depth) {
                $ott_vlogger_indent = str_repeat($t, $ott_vlogger_depth);
            } else {
                $ott_vlogger_indent = '';
            }

            $ott_vlogger_css_class = array('page_item', 'page-item-' . $page->ID);

            if (isset($ott_vlogger_args['pages_with_children'][$page->ID])) {
                $ott_vlogger_css_class[] = 'page_item_has_children';
            }

            if (!empty($current_page)) {
                $_current_page = get_post($current_page);
                if ($_current_page && in_array($page->ID, $_current_page->ancestors, true)) {
                    $ott_vlogger_css_class[] = 'current_page_ancestor';
                }
                if ($page->ID === $current_page) {
                    $ott_vlogger_css_class[] = 'current_page_item';
                } elseif ($_current_page && $page->ID === $_current_page->post_parent) {
                    $ott_vlogger_css_class[] = 'current_page_parent';
                }
            } elseif (get_option('page_for_posts') === $page->ID) {
                $ott_vlogger_css_class[] = 'current_page_parent';
            }

            /** This filter is documented in wp-includes/class-walker-page.php */
            $ott_vlogger_css_classes = implode(' ', apply_filters('page_css_class', $ott_vlogger_css_class, $page, $ott_vlogger_depth, $ott_vlogger_args, $current_page));
            $ott_vlogger_css_classes = $ott_vlogger_css_classes ? ' class="' . esc_attr($ott_vlogger_css_classes) . '"' : '';

            if ('' === $page->post_title) {
                /* translators: %d: ID of a post. */
                $page->post_title = sprintf(__('#%d (no title)', 'ott-vlogger'), $page->ID);
            }

            $ott_vlogger_args['link_before'] = empty($ott_vlogger_args['link_before']) ? '' : $ott_vlogger_args['link_before'];
            $ott_vlogger_args['link_after'] = empty($ott_vlogger_args['link_after']) ? '' : $ott_vlogger_args['link_after'];

            $ott_vlogger_atts = array();
            $ott_vlogger_atts['href'] = get_permalink($page->ID);
            $ott_vlogger_atts['aria-current'] = ($page->ID === $current_page) ? 'page' : '';

            /** This filter is documented in wp-includes/class-walker-page.php */
            $ott_vlogger_atts = apply_filters('page_menu_link_attributes', $ott_vlogger_atts, $page, $ott_vlogger_depth, $ott_vlogger_args, $current_page);

            $ott_vlogger_attributes = '';
            foreach ($ott_vlogger_atts as $attr => $ott_vlogger_value) {
                if (!empty($ott_vlogger_value)) {
                    $ott_vlogger_value = ('href' === $attr) ? esc_url($ott_vlogger_value) : esc_attr($ott_vlogger_value);
                    $ott_vlogger_attributes .= ' ' . $attr . '="' . $ott_vlogger_value . '"';
                }
            }

            $ott_vlogger_args['list_item_before'] = '';
            $ott_vlogger_args['list_item_after'] = '';
            $ott_vlogger_args['icon_rennder'] = '';
            // Wrap the link in a div and append a sub menu toggle.
            if (isset($ott_vlogger_args['show_toggles']) && true === $ott_vlogger_args['show_toggles']) {
                // Wrap the menu item link contents in a div, used for positioning.
                $ott_vlogger_args['list_item_after'] = '';
            }


            // Add icons to menu items with children.
            if (isset($ott_vlogger_args['show_sub_menu_icons']) && true === $ott_vlogger_args['show_sub_menu_icons']) {
                if (isset($ott_vlogger_args['pages_with_children'][$page->ID])) {
                    $ott_vlogger_args['icon_rennder'] = '';
                }
            }

            // Add icons to menu items with children.
            if (isset($ott_vlogger_args['show_toggles']) && true === $ott_vlogger_args['show_toggles']) {
                if (isset($ott_vlogger_args['pages_with_children'][$page->ID])) {

                    $toggle_target_string = '.page_item.page-item-' . $page->ID . ' > .sub-menu';

                    $ott_vlogger_args['list_item_after'] = '<button type="button" class="theme-aria-button submenu-toggle" data-toggle-target="' . $toggle_target_string . '" data-toggle-type="slidetoggle" data-toggle-duration="250"><span class="btn__content" tabindex="-1"><span class="screen-reader-text">' . __( 'Show sub menu', 'ott-vlogger' ) . '</span>' . ott_vlogger_get_theme_svg( 'chevron-down' ) . '</span></button>';
                }
            }

            if (isset($ott_vlogger_args['show_toggles']) && true === $ott_vlogger_args['show_toggles']) {

                $ott_vlogger_output .= $ott_vlogger_indent . sprintf(
                        '<li%s>%s%s<a%s>%s%s%s</a>%s%s',
                        $ott_vlogger_css_classes,
                        '<div class="submenu-wrapper">',
                        $ott_vlogger_args['list_item_before'],
                        $ott_vlogger_attributes,
                        $ott_vlogger_args['link_before'],
                        /** This filter is documented in wp-includes/post-template.php */
                        apply_filters('the_title', $page->post_title, $page->ID),
                        $ott_vlogger_args['link_after'],
                        $ott_vlogger_args['list_item_after'],
                        '</div>'
                    );

            }else{

                $ott_vlogger_output .= $ott_vlogger_indent . sprintf(
                        '<li%s>%s<a%s>%s%s%s%s</a>%s',
                        $ott_vlogger_css_classes,
                        $ott_vlogger_args['list_item_before'],
                        $ott_vlogger_attributes,
                        $ott_vlogger_args['link_before'],
                        /** This filter is documented in wp-includes/post-template.php */
                        apply_filters('the_title', $page->post_title, $page->ID),
                        $ott_vlogger_args['icon_rennder'],
                        $ott_vlogger_args['link_after'],
                        $ott_vlogger_args['list_item_after']
                    );

            }

            if (!empty($ott_vlogger_args['show_date'])) {
                if ('modified' === $ott_vlogger_args['show_date']) {
                    $ott_vlogger_time = $page->post_modified;
                } else {
                    $ott_vlogger_time = $page->post_date;
                }

                $ott_vlogger_date_format = empty($ott_vlogger_args['date_format']) ? '' : $ott_vlogger_args['date_format'];
                $ott_vlogger_output .= ' ' . mysql2date($ott_vlogger_date_format, $ott_vlogger_time);
            }
        }
    }
}