<?php
session_start();
include 'includes/db.php';
include 'includes/functions.php';

// Сохраняем информацию о посещении
savePageVisit();

$settings = getSettings(['mainpage_pages', 'category_pages', 'grid_pages', 'cards_pages', 'gallery_pages', 'gallery_post_image', 'page_post_image', 'post_post_image', 'home_page_category', 'before_menu_code', 'after_menu_code']);
// Получаем URL и разбиваем его на части
$url = trim($_SERVER['REQUEST_URI'], '/');
$url = strtok($url, '?'); // Убираем GET-параметры из URL
$parts = explode('/', $url);

$file_path = __DIR__ . '/' . $url;
if (file_exists($file_path) && is_file($file_path)) {
    $mime_type = mime_content_type($file_path);
    header("Content-Type: $mime_type");
    readfile($file_path);
    exit;
}

// Определяем тип страницы (первая часть URL)
$page_type = $parts[0] ?: 'home'; // Если пустой URL, то это home
$slug = isset($parts[1]) ? rawurldecode($parts[1]) : ''; // Используем rawurldecode вместо urldecode

// Получаем общие данные для всех страниц
$site_name = getSettings(['site_name'])['site_name'] ?? 'Мой сайт';
$menu = getMenu();
$content_blocks = getContentBlocks(['header', 'footer', 'sidebar']);

// Настройки пагинации
$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$current_page = max(1, $current_page); // Убедимся, что страница не меньше 1

// Роутинг
switch ($page_type) {
    case (preg_match('/\.html$/', $page_type) ? true : false):
        // Проверяем существование файла
        $file_path = __DIR__ . '/' . $page_type;
        if (file_exists($file_path)) {
            // Читаем содержимое HTML файла
            $html_content = file_get_contents($file_path);
            // Отдаем только содержимое без вывода шаблона
            echo $html_content;
            exit;
        } else {
            header("HTTP/1.0 404 Not Found");
            $template = '404';
        }
        break;

    case '':
    case 'home':
        // Получаем настройки главной страницы
        $home_settings = getSettings(['home_page_type', 'static_page_id', 'mainpage_pages', 'home_page_category']);
        $home_page_type = $home_settings['home_page_type'] ?? 'latest_posts';
        
        if ($home_page_type === 'static_page' && !empty($home_settings['static_page_id'])) {
            // Получаем статическую страницу
            $post = getPostById($home_settings['static_page_id']);
            if ($post && $post['status'] === 'published' && $post['post_type'] === 'page') {
                $template = 'single';
            } else {
                // Если страница не найдена или не опубликована, показываем последние записи
                $posts_per_page = (int)($home_settings['mainpage_pages'] ?? 10);
                $offset = ($current_page - 1) * $posts_per_page;
                $posts = getPosts($posts_per_page, $offset, 'is_sticky DESC, created_at DESC');
                $total_posts = getTotalPostsCount();
                $total_pages = ceil($total_posts / $posts_per_page);
                $template = 'home';
            }
        } else {
            // Показываем последние записи
            $posts_per_page = (int)($home_settings['mainpage_pages'] ?? 10);
            $offset = ($current_page - 1) * $posts_per_page;
            
            // Проверяем наличие выбранной категории
            if (!empty($home_settings['home_page_category'])) {
                $category = $home_settings['home_page_category'];
                $orderBy = 'is_sticky DESC, created_at DESC';
                $posts = getPostsByCategory($category, $posts_per_page, $offset, $orderBy, null);
                $total_posts = getTotalPostsCountByCategory($category, null);
            } else {
                $posts = getPosts($posts_per_page, $offset, 'is_sticky DESC, created_at DESC');
                $total_posts = getTotalPostsCount();
            }
            
            $total_pages = ceil($total_posts / $posts_per_page);
            $template = 'home';
        }
        break;

    case 'post':
        // Получаем пост по slug
        $post = getPostBySlug($slug);
        if (!$post) {
            header("HTTP/1.0 404 Not Found");
            $template = '404';
            break;
        }

        // Добавляем проверку статуса публикации
        if (!isset($post['status']) || $post['status'] !== 'published') {
            $post['title'] = 'Запись не опубликована';
            $post['content'] = '<div class="unpublished-notice">
                <h3>🔒 Эта запись пока не опубликована</h3>
                <p>Извините, но данная запись находится на модерации или ещё не опубликована.</p>
            </div>';
            $post['created_at'] = '';
            $post['category'] = '';
            $post['image'] = '';
            $post['show_meta'] = false;
        } else {
            $post['show_meta'] = true;
        }
        
        $template = 'single';
        break;

    case 'page':
        // Получаем страницу по slug
        $post = getPostBySlug($slug, 'page');
        if (!$post) {
            header("HTTP/1.0 404 Not Found");
            $template = '404';
            break;
        }
        
        $template = 'single';
        break;

    case 'category':
            // Получаем количество постов для категории
            $posts_per_page = (int)($settings['category_pages'] ?? 10);
            $offset = ($current_page - 1) * $posts_per_page;
        
            $category = $slug;
            $orderBy = 'created_at DESC';
            // Убираем фильтр по post_type, передаем null
            $posts = getPostsByCategory($category, $posts_per_page, $offset, $orderBy, null);
            $total_posts = getTotalPostsCountByCategory($category, null);
        
            $total_pages = ceil($total_posts / $posts_per_page);
        
            $view_type = 'default';
            $template = 'category';
            break;
    case 'grid':
        // Получаем количество постов для сетки
        $posts_per_page = (int)($settings['grid_pages'] ?? 50);
        $offset = ($current_page - 1) * $posts_per_page;

        $category = $slug;
        $orderBy = 'created_at DESC';
        // Убираем фильтр по post_type, так как он может быть разным
        $posts = getPostsByCategory($category, $posts_per_page, $offset, $orderBy, null);
        $total_posts = getTotalPostsCountByCategory($category, null);

        $total_pages = ceil($total_posts / $posts_per_page);

        $view_type = 'grid';
        $template = 'grid';
        break;
    case 'cards':
        // Получаем количество постов для карточек
        $posts_per_page = (int)($settings['cards_pages'] ?? 1000);
        $offset = ($current_page - 1) * $posts_per_page;

        $category = $slug;
        $orderBy = 'title ASC';
        // Убираем фильтр по post_type, передаем null
        $posts = getPostsByCategory($category, $posts_per_page, $offset, $orderBy, null);
        $total_posts = getTotalPostsCountByCategory($category, null);

        $total_pages = ceil($total_posts / $posts_per_page);

        $view_type = 'cards';
        $template = 'cards';
        break;
    case 'reviews':
        // Получаем только одобренные отзывы
        $posts_per_page = 10;
        $offset = ($current_page - 1) * $posts_per_page;
        $reviews = getApprovedReviews($posts_per_page, $offset);
        $total_reviews = getTotalApprovedReviewsCount();
        $total_pages = ceil($total_reviews / $posts_per_page);
        
        $template = 'reviews';
        break;

    case 'gallery':
        // Получаем количество постов для галереи
        $posts_per_page = (int)($settings['gallery_pages'] ?? 9);
        $offset = ($current_page - 1) * $posts_per_page;

        $category = $slug; // может быть пустым для всех галерей
        $orderBy = 'created_at DESC';
        
        // Получаем только записи типа 'gallery'
        if ($category) {
            // Если указана категория, фильтруем по ней
            $posts = getPostsByCategory($category, $posts_per_page, $offset, $orderBy, 'gallery');
            $total_posts = getTotalPostsCountByCategory($category, 'gallery');
        } else {
            // Если категория не указана, получаем все галереи
            $posts = getPostsByType('gallery', $posts_per_page, $offset, $orderBy);
            $total_posts = getTotalPostsCountByType('gallery');
        }

        $total_pages = ceil($total_posts / $posts_per_page);
        $template = 'gallery';
        break;
        
    default:
        // 404 страница
        header("HTTP/1.0 404 Not Found");
        $template = '404';
        break;
}

// Добавляем скрипты для фронтенда
$scripts = [
    '/assets/js/menu.js'
];

// Подключаем соответствующий шаблон
include "templates/{$template}.php";

// Добавляем скрипты в конец страницы
if (!empty($scripts)): ?>
    <?php foreach ($scripts as $script): ?>
        <script src="<?php echo $script; ?>"></script>
    <?php endforeach; ?>
<?php endif; ?>
    <script>
        document.addEventListener("DOMContentLoaded", function () {
        if (window.location.hash === "#buy-ticket") {
            document.getElementById("buy-ticket")?.click();
        }
        });
    </script>
</body>
</html>
