/* Start custom CSS */<?php
/**
 * Plugin Name: Elementor Style Dominance (MU)
 * Description: Делает стили Elementor главными: переносит их в конец очереди и отключает конфликтные стили темы/ядра.
 * Author: ChatGPT
 * Version: 1.0.0
 */

// === НАСТРОЙКИ (при необходимости поменяйте) ===============================
const ESD_DISABLE_BLOCK_STYLES      = true;  // Отключить wp-block-library, classic-theme-styles, global-styles
const ESD_TRY_DISABLE_THEME_STYLE   = false; // Попробовать отключить style.css темы (аккуратно!)
const ESD_EXTRA_SPECIFICITY_CSS     = false; // Включить небольшой CSS-усилитель специфичности для .elementor
// ==========================================================================

/**
 * 1) Мягко отключаем Gutenberg/Global Styles (часто конфликтуют с типографикой и отступами).
 */
add_action('wp_enqueue_scripts', function () {
    if (ESD_DISABLE_BLOCK_STYLES) {
        $handles = array(
            'wp-block-library',
            'wp-block-library-theme',
            'global-styles',
            'classic-theme-styles'
        );
        foreach ($handles as $h) {
            wp_dequeue_style($h);
            wp_deregister_style($h);
        }
    }
}, 20);

/**
 * 2) (Опционально) Пытаемся убрать основной стиль темы.
 * Работает не для всех тем (у разных тем свои handle-имена).
 */
add_action('wp_enqueue_scripts', function () {
    if (!ESD_TRY_DISABLE_THEME_STYLE) return;

    // Частые варианты handle'ов
    $likely_theme_handles = array('theme-style', 'style', 'styles', get_template() . '-style');
    foreach ($likely_theme_handles as $h) {
        if (wp_style_is($h, 'enqueued') || wp_style_is($h, 'registered')) {
            wp_dequeue_style($h);
            wp_deregister_style($h);
        }
    }
}, 50);

/**
 * 3) Делаем так, чтобы стили Elementor шли ПОСЛЕДНИМИ в <head>.
 * Трюк: снимаем их из очереди и снова ставим — на очень позднем приоритете.
 */
add_action('wp_enqueue_scripts', function () {
    global $wp_styles;
    if (!$wp_styles instanceof WP_Styles) return;

    // Какие handle'ы считаем "элементоровскими"
    $is_elementor_handle = function ($handle) {
        return (
            strpos($handle, 'elementor') !== false ||
            strpos($handle, 'eicons') !== false     // иконки Elementor
        );
    };

    // Собираем все элементоровские стили, которые уже стоят в очереди
    $to_requeue = array();
    foreach ((array)$wp_styles->queue as $handle) {
        if ($is_elementor_handle($handle)) {
            $to_requeue[] = $handle;
        }
    }

    // Снимаем и возвращаем в самом конце
    foreach ($to_requeue as $handle) {
        wp_dequeue_style($handle);
    }

    // Очень поздний приоритет гарантирует печать в самом конце
    add_action('wp_print_styles', function () use ($to_requeue) {
        foreach ($to_requeue as $handle) {
            // Если вдруг кто-то успел дерегистрировать — не падаем
            if (wp_style_is($handle, 'registered') || wp_style_is($handle, 'enqueued')) {
                wp_enqueue_style($handle);
            }
        }
    }, 9999);
}, 100);

/**
 * 4) (Опционально) Мини-усилитель специфичности внутри .elementor
 * Включайте, если остались точечные конфликты типографики/отступов.
 */
add_action('wp_head', function () {
    if (!ESD_EXTRA_SPECIFICITY_CSS) return;
    ?>
    <style id="esd-specificity">
      /* Усиливаем базовые заголовки и текст внутри Elementor-обёрток */
      .elementor h1, .elementor h2, .elementor h3, .elementor h4, .elementor h5, .elementor h6,
      .elementor p, .elementor a, .elementor li, .elementor span, .elementor div {
          all: revert-layer; /* где поддерживается: снимает внешние кастомизации слоёв */
      }
      /* Запасной вариант, если браузер без revert-layer: */
      .elementor * {
          font-family: inherit;
          font-weight: inherit;
          line-height: inherit;
          color: inherit;
      }
    </style>
    <?php
}, 1000);

/**
 * 5) Безопасность: ничего не делаем в админке/редакторе Elementor.
 */
add_action('admin_init', function () {
    if (is_admin()) {
        // Тут можно отключить логику, но в данном плагине мы и так не трогаем админ-часть
    }
});/* End custom CSS */