

<?php
// requere once вместо include использовать!
// доделать example module и component
require_once __DIR__ . '/vendor/autoload.php';

// Initialize Timber.
Timber\Timber::init();

Timber::$dirname = [
    [
        'modules',
        'templates'
    ],
];


add_theme_support('post-thumbnails');

//Подруключение всех ajax controller если запрос сделан по ajax


$modulesDir = __DIR__ . '/modules';

// Функция для рекурсивного подключения файлов
function requireAjaxControllers($baseDir) {
    $modules = glob($baseDir . '/*', GLOB_ONLYDIR);

    foreach ($modules as $module) {
        $moduleController = $module . '/module-ajax-controller.php';
        if (file_exists($moduleController)) {
            require_once $moduleController;
        }

        $componentsDir = $module . '/components';
        if (is_dir($componentsDir)) {
            $components = glob($componentsDir . '/*', GLOB_ONLYDIR);
            foreach ($components as $component) {
                $componentController = $component . '/component-ajax-controller.php';
                if (file_exists($componentController)) {
                    require_once $componentController;
                }
            }
        }
    }
}

function requireShortcodes($baseDir) {
    $modules = glob($baseDir . '/*', GLOB_ONLYDIR);

    foreach ($modules as $module) {
        $componentsDir = $module . '/shortcodes';
        if (is_dir($componentsDir)) {
            // Рекурсивно подключаем все shortcodes.php
            requireShortcodesRecursive($componentsDir);
        }
    }
}

function requireShortcodesRecursive($dir) {
    // Получаем все подпапки в текущем каталоге
    $components = glob($dir . '/*', GLOB_ONLYDIR);
    
    foreach ($components as $component) {
        // Проверяем наличие файла shortcode.php в текущей подпапке
        $componentController = $component . '/shortcode.php';
        if (file_exists($componentController)) {
            require_once $componentController;
        }
        
        // Рекурсивно вызываем функцию для каждой найденной подпапки
        requireShortcodesRecursive($component);
    }
}

// Пример вызова функции

function includeFilesFromFolder($folder) {
    // Проверяем, существует ли папка
    if (is_dir($folder)) {
        // Открываем директорию
        $files = scandir($folder);
        
        // Перебираем файлы в директории
        foreach ($files as $file) {
            // Пропускаем текущую и родительскую директории
            if ($file !== '.' && $file !== '..') {
                // Формируем полный путь к файлу
                $filePath = $folder . DIRECTORY_SEPARATOR . $file;
                
                // Проверяем, является ли это файлом и имеет ли нужное расширение (например, .php)
                if (is_file($filePath) && pathinfo($filePath, PATHINFO_EXTENSION) === 'php') {
                    include_once $filePath; // Подключаем файл
                }
            }
        }
    } else {
        throw new Exception("Директория не найдена: $folder");
    }
}

// Подключает модуль из папки /modules/ 
function include_module($module_name) {
    // Убедитесь, что имя модуля не пустое
    if (empty($module_name)) {
        return;
    }

    // Получаем путь к каталогу модуля
    $module_dir = get_template_directory() . '/modules/' . $module_name;



// Регистрируем стили и скрипты
add_action('wp_enqueue_scripts', function() use ($module_name, $module_dir) {
    // Подключаем стили
    $css_dir = $module_dir . '/assets/css';
    if (is_dir($css_dir)) {
        $css_files = scandir($css_dir);

        // Приоритетные файлы
        $priority_files = [
            'normalize.css',
            'gp-style-core.css',
            'gp-style-desktop.css',
            'gp-style-tablet.css',
            'gp-style-mobile.css'
        ];

        // Подключаем приоритетные файлы в заданном порядке
        foreach ($priority_files as $priority_file) {
            $file_path = $css_dir . '/' . $priority_file;
            if (file_exists($file_path)) {
                wp_enqueue_style(
                    $module_name . '-' . pathinfo($priority_file, PATHINFO_FILENAME),
                    get_template_directory_uri() . '/modules/' . $module_name . '/assets/css/' . $priority_file,
                    [],
                    filemtime($file_path)
                );
            }
        }

        // Подключаем остальные CSS-файлы
        foreach ($css_files as $css_file) {
            if (
                pathinfo($css_file, PATHINFO_EXTENSION) === 'css' &&
                $css_file !== '.' &&
                $css_file !== '..' &&
                !in_array($css_file, $priority_files)
            ) {
                $file_path = $css_dir . '/' . $css_file;
                wp_enqueue_style(
                    $module_name . '-' . pathinfo($css_file, PATHINFO_FILENAME),
                    get_template_directory_uri() . '/modules/' . $module_name . '/assets/css/' . $css_file,
                    [],
                    filemtime($file_path)
                );
            }
        }
    }

    // Подключаем скрипты
    $js_dir = $module_dir . '/assets/js';
    if (is_dir($js_dir)) {
        $js_files = scandir($js_dir);
        foreach ($js_files as $js_file) {
            if (
                pathinfo($js_file, PATHINFO_EXTENSION) === 'js' &&
                $js_file !== '.' &&
                $js_file !== '..'
            ) {
                $file_path = $js_dir . '/' . $js_file;
                wp_enqueue_script(
                    $module_name . '-' . pathinfo($js_file, PATHINFO_FILENAME),
                    get_template_directory_uri() . '/modules/' . $module_name . '/assets/js/' . $js_file,
                    ['jquery'],
                    filemtime($file_path),
                    true
                );
            }
        }
    }
});


    // Подключаем контроллер модуля
    $module_controller = $module_dir . '/module-controller.php';
        if (file_exists($module_controller)) {
            include_once $module_controller ;
    }

}

function include_component($module_name, $component_name) {
    // Убедитесь, что имя модуля и компонента не пустые
    if (empty($module_name) || empty($component_name)) {
        return;
    }

    // Получаем путь к каталогу модуля
    $component_dir = get_template_directory() . '/modules/' . $module_name . '/components/' . $component_name;

    // Регистрируем стили и скрипты
    add_action('wp_enqueue_scripts', function() use ($module_name, $component_name, $component_dir) {
        // Подключаем стили
        $css_dir = $component_dir . '/assets/css';
        if (is_dir($css_dir)) {
            $css_files = scandir($css_dir);
    
            // Приоритетные файлы в нужном порядке
            $priority_files = [
                'gp-style-core.css',
                'gp-style-desktop.css',
                'gp-style-tablet.css',
                'gp-style-mobile.css'
            ];
    
            // Подключаем приоритетные файлы в заданном порядке
            foreach ($priority_files as $priority_file) {
                $file_path = $css_dir . '/' . $priority_file;
                if (file_exists($file_path)) {
                    $handle = "{$module_name}-{$component_name}-" . pathinfo($priority_file, PATHINFO_FILENAME);
                    $src = get_template_directory_uri() . "/modules/{$module_name}/components/{$component_name}/assets/css/{$priority_file}";
                    wp_enqueue_style($handle, $src, [], filemtime($file_path)); // Используем filemtime для версии
                }
            }
    
            // Подключаем остальные CSS-файлы
            foreach ($css_files as $css_file) {
                if (pathinfo($css_file, PATHINFO_EXTENSION) === 'css' && !in_array($css_file, $priority_files)) {
                    $file_path = $css_dir . '/' . $css_file;
                    $handle = "{$module_name}-{$component_name}-" . pathinfo($css_file, PATHINFO_FILENAME);
                    $src = get_template_directory_uri() . "/modules/{$module_name}/components/{$component_name}/assets/css/{$css_file}";
                    wp_enqueue_style($handle, $src, [], filemtime($file_path));
                }
            }
        }
    
        // Подключаем скрипты
        $js_dir = $component_dir . '/assets/js';
        if (is_dir($js_dir)) {
            $js_files = scandir($js_dir);
            foreach ($js_files as $js_file) {
                if (pathinfo($js_file, PATHINFO_EXTENSION) === 'js') {
                    $file_path = $js_dir . '/' . $js_file;
                    $handle = "{$module_name}-{$component_name}-" . pathinfo($js_file, PATHINFO_FILENAME);
                    $src = get_template_directory_uri() . "/modules/{$module_name}/components/{$component_name}/assets/js/{$js_file}";
                    wp_enqueue_script($handle, $src, ['jquery'], filemtime($file_path), true);
                }
            }
        }
    });

    $component_controller = $component_dir . '/component-controller.php';
        if (file_exists($component_controller)) {
            include_once  $component_controller ; 
        }
    
    

}

includeFilesFromFolder(get_template_directory() . '/global-functions');

// Add the function to the Timber context
add_filter('timber/context', function($context) {
    $context['template_path'] = get_template_directory_uri();
    return $context;
});


$modules_path = get_template_directory() . '/modules/*/editor-blocks/*/editor-block-controller.php';
foreach (glob($modules_path) as $file) {
    require_once $file; // Подключаем каждый найденный файл
}
add_filter('timber/context', function($context) {
    $context['current_lang'] = pll_current_language();

    return $context;
});

requireShortcodes(get_template_directory() . '/modules');

require_once('modules/blog/components/news-list/component-ajax-controller.php');
require_once('modules/forms/module-ajax-controller.php');
include_module('forms');
include_module('layout');

