<?php
// Защита от прямого доступа
if (!defined('ABSPATH')) {
    exit;
}

// Функция создания оглавления
function create_custom_toc($article_content) {
    // Находим все заголовки (h2–h6)
    preg_match_all('/<h([2-6])>(.*?)<\/h\1>/', $article_content, $headings, PREG_SET_ORDER);

    // Если заголовков нет – возвращаем исходный контент без изменений
    if (empty($headings)) {
        return [
            'toc'     => '',
            'content' => $article_content
        ];
    }

    $toc_title = __('Table of Contents', 'ai-content-wizard');

    // Базовые инлайновые стили
    $toc_styles       = "style='margin: 20px 0; padding: 15px; background-color: #f9f9f9; border: 1px solid #ddd; border-radius: 5px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);'";
    $toc_title_styles = "style='margin: 0 0 16px 0; padding-bottom: 8px; font-size: 1.4em; font-weight: 600; color: #1f2937; border-bottom: 1px solid #ddd;'";
    $toc_list_styles  = "style='list-style-type: \"– \"; padding-left: 20px; margin: 0; max-height: 400px; overflow-y: auto; position: relative; z-index: 1;'";
    $toc_item_styles  = "style='margin: 10px 0; line-height: 1.5;'";
    $toc_link_styles  = "style='text-decoration: none; color: #374151; display: block; padding-left: 8px; transition: color 0.3s ease, padding-left 0.3s ease;'";

    // Формируем контейнер оглавления
    $toc  = "<!-- wp:html -->\n";
    $toc .= "<nav id='rank-math-toc' class='custom-toc wp-block-rank-math-toc-block' role='navigation' aria-label='Table of contents' itemscope itemtype='https://schema.org/SiteNavigationElement' $toc_styles>";
    $toc .= "<h2 class='toc-title' $toc_title_styles>$toc_title</h2>";
    $toc .= "<ul class='toc-list' $toc_list_styles>";

    $previous_level = 0;

    foreach ($headings as $match) {
        $heading_level = intval($match[1]);
        $heading_text  = strip_tags($match[2]);
        $anchor        = sanitize_title($heading_text);

        // Закрываем вложенные списки при уменьшении уровня
        if ($heading_level < $previous_level) {
            $toc .= str_repeat("</ul></li>", $previous_level - $heading_level);
        }

        // Открываем вложенный список при увеличении уровня
        if ($heading_level > $previous_level) {
            $toc .= "<ul class='toc-sublist' $toc_list_styles>";
        } elseif ($heading_level <= $previous_level && $previous_level > 0) {
            $toc .= "</li>";
        }

        // Добавляем элемент оглавления с учетом вложенности
        $toc .= "<li class='toc-item toc-level-$heading_level' $toc_item_styles style='padding-left: " . (($heading_level - 2) * 16) . "px;'>";
        $toc .= "<a href='#$anchor' class='toc-link' $toc_link_styles>$heading_text</a>";
        $previous_level = $heading_level;

        // Обновляем заголовок в контенте, добавляя id для якорей
        $article_content = str_replace($match[0], "<h$heading_level id='$anchor'>" . $match[2] . "</h$heading_level>", $article_content);
    }

    // Закрываем все открытые списки
    $toc .= str_repeat("</li></ul>", $previous_level - 1);
    $toc .= "</li></ul></nav>\n<!-- /wp:html -->";

    return [
        'toc'     => $toc,
        'content' => $article_content
    ];
}