<?php

/**
 * Fonctions de breadcrumb pour Guides & Conseils
 *
 * @package Laurent-Perrier
 * @since 1.0.0
 */

// Empêcher l'accès direct
if (!defined('ABSPATH')) {
    exit;
}

/**
 * Fonction pour générer le breadcrumb hiérarchique des guides
 *
 * @param int|null $post_id ID du post (optionnel)
 * @return array Tableau du breadcrumb
 */
function lp_guide_breadcrumb($post_id = null)
{
    if (!$post_id) {
        global $post;
        // Sécuriser si $post n'est pas défini
        if ($post && isset($post->ID)) {
            $post_id = $post->ID;
        } else {
            return array();
        }
    }

    $breadcrumb = array();

    // Ajouter "Accueil"
    $breadcrumb[] = array(
        'title' => __('Accueil', 'laurentperrier'),
        'url' => home_url('/')
    );

    // Ajouter "Guides & Conseils"
    $breadcrumb[] = array(
        'title' => __('Guides & Conseils', 'laurentperrier'),
        'url' => get_post_type_archive_link('guide')
    );

    // Récupérer les catégories du guide
    $terms = wp_get_object_terms($post_id, LP_TAX_GUIDE_CATEGORY);

    if (!empty($terms) && !is_wp_error($terms)) {
        // Prendre la première catégorie et construire la hiérarchie
        $term = $terms[0];
        $ancestors = get_ancestors($term->term_id, LP_TAX_GUIDE_CATEGORY);
        $ancestors = array_reverse($ancestors);
        $ancestors[] = $term->term_id;

        foreach ($ancestors as $ancestor_id) {
            $ancestor_term = get_term($ancestor_id, LP_TAX_GUIDE_CATEGORY);
            if ($ancestor_term && !is_wp_error($ancestor_term)) {
                $breadcrumb[] = array(
                    'title' => $ancestor_term->name,
                    'url' => get_term_link($ancestor_term)
                );
            }
        }
    }

    // Ajouter le titre du guide actuel (sans lien)
    $breadcrumb[] = array(
        'title' => get_the_title($post_id),
        'url' => ''
    );

    return $breadcrumb;
}

/**
 * Afficher le breadcrumb hiérarchique des guides
 *
 * @param int|null $post_id ID du post (optionnel)
 * @param array $args Arguments de configuration
 */
function lp_display_guide_breadcrumb($post_id = null, $args = array())
{
    // Arguments par défaut
    $defaults = array(
        'separator' => '>',
        'home_text' => __('Accueil', 'laurentperrier'),
        'class' => 'breadcrumb',
        'show_current' => true,
        'echo' => true
    );

    $args = wp_parse_args($args, $defaults);

    $breadcrumb = lp_guide_breadcrumb($post_id);

    if (empty($breadcrumb)) {
        return;
    }

    $output = '<div class="breadcrumbs">';
    $output .= '<nav class="container ' . esc_attr($args['class']) . '" aria-label="' . esc_attr__('breadcrumb', 'laurentperrier') . '">';
    $output .= '<ol class="breadcrumb-list">';

    $total = count($breadcrumb);
    foreach ($breadcrumb as $index => $item) {
        $is_last = ($index === $total - 1);

        $output .= '<li class="breadcrumb-item">';

        if (!$is_last && !empty($item['url'])) {
            $output .= '<a href="' . esc_url($item['url']) . '">';
            $output .= esc_html($item['title']);
            $output .= '</a>';
        } else {
            if ($args['show_current']) {
                $output .= '<span>' . esc_html($item['title']) . '</span>';
            }
        }

        if (!$is_last) {
            $output .= '<span class="separator">' . esc_html($args['separator']) . '</span>';
        }

        $output .= '</li>';
    }

    $output .= '</ol>';
    $output .= '</nav>';
    $output .= '</div>';

    if ($args['echo']) {
        echo $output;
    } else {
        return $output;
    }
}

/**
 * Breadcrumb pour les archives de catégories de guides
 *
 * @param object $term Terme de la taxonomie
 * @return array Tableau du breadcrumb
 */
function lp_guide_category_breadcrumb($term = null)
{
    if (!$term) {
        $term = get_queried_object();
    }

    $breadcrumb = array();

    // Ajouter "Accueil"
    $breadcrumb[] = array(
        'title' => __('Accueil', 'laurentperrier'),
        'url' => home_url('/')
    );

    // Ajouter "Guides & Conseils"
    $breadcrumb[] = array(
        'title' => __('Guides & Conseils', 'laurentperrier'),
        'url' => get_post_type_archive_link('guide')
    );

    // Construire la hiérarchie des catégories parentes
    if ($term && !is_wp_error($term)) {
        $ancestors = get_ancestors($term->term_id, 'guide_category');
        $ancestors = array_reverse($ancestors);

        foreach ($ancestors as $ancestor_id) {
            $ancestor_term = get_term($ancestor_id, 'guide_category');
            if ($ancestor_term && !is_wp_error($ancestor_term)) {
                $breadcrumb[] = array(
                    'title' => $ancestor_term->name,
                    'url' => get_term_link($ancestor_term)
                );
            }
        }

        // Ajouter la catégorie actuelle (sans lien)
        $breadcrumb[] = array(
            'title' => $term->name,
            'url' => ''
        );
    }

    return $breadcrumb;
}

/**
 * Afficher le breadcrumb pour les archives de catégories
 *
 * @param object $term Terme de la taxonomie
 * @param array $args Arguments de configuration
 */
function lp_display_guide_category_breadcrumb($term = null, $args = array())
{
    // Arguments par défaut
    $defaults = array(
        'separator' => '>',
        'class' => 'breadcrumb',
        'echo' => true
    );

    $args = wp_parse_args($args, $defaults);

    $breadcrumb = lp_guide_category_breadcrumb($term);

    if (empty($breadcrumb)) {
        return;
    }

    $output = '<div class="breadcrumbs">';
    $output .= '<nav class="container ' . esc_attr($args['class']) . '" aria-label="' . esc_attr__('Fil d\'Ariane', 'laurentperrier') . '">';
    $output .= '<ol class="breadcrumb-list">';

    $total = count($breadcrumb);
    foreach ($breadcrumb as $index => $item) {
        $is_last = ($index === $total - 1);

        $output .= '<li class="breadcrumb-item">';

        if (!$is_last && !empty($item['url'])) {
            $output .= '<a href="' . esc_url($item['url']) . '" >';
            $output .= esc_html($item['title']);
            $output .= '</a>';
        } else {
            $output .= '<span>' . esc_html($item['title']) . '</span>';
        }

        if (!$is_last) {
            $output .= '<span class="separator"> ' . esc_html($args['separator']) . '</span>';
        }

        $output .= '</li>';
    }

    $output .= '</ol>';
    $output .= '</nav>';
    $output .= '</div>';

    if ($args['echo']) {
        echo $output;
    } else {
        return $output;
    }
}

/**
 * Breadcrumb générique pour tous les types de contenu
 *
 * @param array $args Arguments de configuration
 */
function lp_universal_breadcrumb($args = array())
{
    // Arguments par défaut
    $defaults = array(
        'separator' => '>',
        'home_text' => __('Accueil', 'laurentperrier'),
        'class' => 'breadcrumb',
        'show_current' => true,
        'echo' => true
    );

    $args = wp_parse_args($args, $defaults);

    // Déterminer le type de page et afficher le breadcrumb approprié
    if (is_singular('guide')) {
        lp_display_guide_breadcrumb(null, $args);
    } elseif (is_tax('guide_category')) {
        lp_display_guide_category_breadcrumb(null, $args);
    } elseif (is_post_type_archive('guide')) {
        // Breadcrumb simple pour l'archive des guides
        $breadcrumb = array(
            array(
                'title' => $args['home_text'],
                'url' => home_url('/')
            ),
            array(
                'title' => __('Guides & Conseils', 'laurentperrier'),
                'url' => ''
            )
        );

        $output = '';
        $output .= '<nav class="' . esc_attr($args['class']) . '" aria-label="' . esc_attr__('Fil d\'Ariane', 'laurentperrier') . '">';
        $output .= '<ol class="breadcrumb-list flex items-center space-x-2 text-sm text-gray-600">';

        foreach ($breadcrumb as $index => $item) {
            $is_last = ($index === count($breadcrumb) - 1);

            $output .= '<li class="breadcrumb-item">';

            if (!$is_last && !empty($item['url'])) {
                $output .= '<a href="' . esc_url($item['url']) . '" class="hover:text-gold transition-colors">';
                $output .= esc_html($item['title']);
                $output .= '</a>';
            } else {
                $output .= '<span class="text-gray-900 font-medium">' . esc_html($item['title']) . '</span>';
            }

            if (!$is_last) {
                $output .= '<span class="mx-2 text-gray-400">' . esc_html($args['separator']) . '</span>';
            }

            $output .= '</li>';
        }

        $output .= '</ol>';
        $output .= '</nav>';

        if ($args['echo']) {
            echo $output;
        } else {
            return $output;
        }
    }
}
