<?php
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}
require_once __DIR__ . '/../includes/resultsHelper.php';

$rawResults = $_SESSION["search_results"] ?? [];
$query = $_SESSION["search_query"] ?? "";

// Sortierung / Kategorie / Limit: GET-Parameter haben Vorrang, sonst
// Rückfall auf die zuletzt in der Session gemerkten Werte. So bleibt
// z.B. ein reiner Pagination-Link (?page=2) bei der aktuellen
// Sortierung/Filterung.
$currentSort = $_GET['sort'] ?? ($_SESSION['search_sort'] ?? 'alphabet');
if (!in_array($currentSort, ['alphabet', 'likes', 'newest', 'oldest'])) {
    $currentSort = 'alphabet';
}
$_SESSION['search_sort'] = $currentSort;

$currentCategory = strtolower($_GET['category'] ?? ($_SESSION['search_category'] ?? 'all'));
$_SESSION['search_category'] = $currentCategory;

$limit = isset($_GET['limit']) ? (int)$_GET['limit'] : ($_SESSION['search_limit'] ?? 10);
if (!in_array($limit, [10, 20, 50, 100])) {
    $limit = 10;
}
$_SESSION['search_limit'] = $limit;

// Serverseitig sortieren + filtern
$filteredResults = sortSearchResults($rawResults, $currentSort);
$filteredResults = filterSearchResultsByCategory($filteredResults, $currentCategory);

$totalResultsCount = count($filteredResults);
$totalPages = max(1, (int)ceil($totalResultsCount / $limit));

$currentPage = isset($_GET['page']) ? (int)$_GET['page'] : 1;
if ($currentPage < 1) {
    $currentPage = 1;
} elseif ($currentPage > $totalPages) {
    $currentPage = $totalPages;
}

$offset = ($currentPage - 1) * $limit;

// Dies ist die No-JS-Basisversion: nur die aktuelle Seite wird gerendert.
// Bei aktiviertem JS lädt js/results-app.js zusätzlich den kompletten
// Datensatz nach (ein einziger Request) und übernimmt Sortierung, Filter
// und Pagination danach komplett im Browser, ohne weitere Serveranfragen.
$results = array_slice($filteredResults, $offset, $limit);
$resultCount = count($results);

// Kategorien für das Auswahlfeld (Wert => Label)
$categories = [
        'Deutsch' => 'Deutsch', 'Englisch' => 'Englisch', 'Franzoesisch' => 'Französisch',
        'Latein' => 'Latein', 'Literatur' => 'Literatur', 'Mathematik' => 'Mathematik',
        'Biologie' => 'Biologie', 'Informatik' => 'Informatik', 'Chemie' => 'Chemie',
        'Physik' => 'Physik', 'Astronomie' => 'Astronomie', 'Geschichte' => 'Geschichte',
        'Erdkunde' => 'Erdkunde', 'Sozialkunde' => 'Sozialkunde', 'Wirtschaftskunde' => 'Wirtschaftskunde',
        'Religion' => 'Religion', 'Ethikunterricht' => 'Ethikunterricht', 'Philosophie' => 'Philosophie',
        'Psychologie' => 'Psychologie', 'Kunst' => 'Kunst', 'Musik' => 'Musik', 'Theater' => 'Theater',
        'Technik' => 'Technik', 'Werken' => 'Werken', 'Hauswirtschaft' => 'Hauswirtschaft', 'Sport' => 'Sport',
];
?>
<!--
    Seite: Suchergebnisse
    Inhalt: Zeigt die Ergebnisse einer Suche an.
    Funktioniert ohne JavaScript (serverseitige Sortierung/Filter/Pagination
    über echte Links + Formulare) und wird bei aktiviertem JS von
    js/search-results.js vollständig client-seitig übernommen.
-->
<div class="s-res-layout-grid">
    <?php include_once "includes/alertMessages.php" ?>

    <!-- Links: Seitenleiste für Filter und Suche -->
    <aside class="s-res-sidebar">

        <!-- Formular 1: startet eine NEUE Suche (löst immer einen Server-Request aus) -->
        <form action="php/controller/search-results-controller.php" method="GET" id="search-form-id" class="s-res-sidebar-form">
            <div class="s-res-sidebar-box">
                <h3 class="s-res-sidebar-title">Suche anpassen</h3>
                <input type="search" id="site-search" name="q" placeholder="Suchen..." class="nav__search" value="<?php echo htmlspecialchars($query); ?>" maxlength="50" required>
                <button type="submit" class="nav__search-button">Suchen</button>
            </div>
        </form>

        <!-- Formular 2: sortiert/filtert die BEREITS gefundenen Ergebnisse.
             Ohne JS: echter Reload dieser Seite, aber ohne erneute Datenbank-Suche.
             Mit JS: search-results.js übernimmt das live im Browser, der Submit-Button
             wird dafür nicht benötigt und über <noscript> versteckt. -->
        <form action="index.php" method="GET" id="s-res-filter-form" class="s-res-sidebar-form">
            <input type="hidden" name="pfad" value="search-results">
            <input type="hidden" name="q" value="<?php echo htmlspecialchars($query); ?>">

            <div class="s-res-sidebar-box">
                <h3 class="s-res-sidebar-title">Sortierung</h3>
                <div class="s-res-filter-group">
                    <label class="s-res-filter-option">
                        <input type="radio" name="sort" value="alphabet" class="sort-radio" <?php echo $currentSort === 'alphabet' ? 'checked' : ''; ?>>
                        <span>Alphabetisch</span>
                    </label>
                    <label class="s-res-filter-option">
                        <input type="radio" name="sort" value="likes" class="sort-radio" <?php echo $currentSort === 'likes' ? 'checked' : ''; ?>>
                        <span>Beliebtheit (Likes)</span>
                    </label>
                    <label class="s-res-filter-option">
                        <input type="radio" name="sort" value="newest" class="sort-radio" <?php echo $currentSort === 'newest' ? 'checked' : ''; ?>>
                        <span>Neueste Beiträge</span>
                    </label>
                    <label class="s-res-filter-option">
                        <input type="radio" name="sort" value="oldest" class="sort-radio" <?php echo $currentSort === 'oldest' ? 'checked' : ''; ?>>
                        <span>Älteste Beiträge</span>
                    </label>
                </div>
            </div>

            <div class="s-res-sidebar-box">
                <h3 class="s-res-sidebar-title">Kategorie filtern</h3>
                <select id="category-filter" name="category" class="s-res-limit-select" style="width: 100%; padding: 8px; border-radius: 6px; border: 1px solid #cbd5e1;">
                    <option value="all" <?php echo $currentCategory === 'all' ? 'selected' : ''; ?>>Alle Kategorien</option>
                    <?php foreach ($categories as $value => $label): ?>
                        <option value="<?php echo htmlspecialchars($value); ?>" <?php echo $currentCategory === strtolower($value) ? 'selected' : ''; ?>><?php echo htmlspecialchars($label); ?></option>
                    <?php endforeach; ?>
                </select>
            </div>

            <noscript>
                <button type="submit" class="nav__search-button">Filter anwenden</button>
            </noscript>
        </form>

    </aside>

    <main class="s-res-main-content">

        <div class="s-res-header">
            <h1 class="s-res-main-title">Suchergebnisse</h1>
            <p class="s-res-meta"><span id="s-res-result-count"><?php echo $totalResultsCount; ?></span> Treffer für Ihre Suchanfrage "<?php echo htmlspecialchars($query); ?>"</p>
        </div>

        <!-- Ergebnisliste -->
        <div class="s-res-list">
            <?php if (!empty($results)): ?>

                <?php foreach ($results as $item):
                    $likesCount = getLikeCount($item);
                    ?>
                    <div class="s-res-item" data-likes="<?php echo $likesCount; ?>" data-category="<?php echo strtolower($item['category'] ?? ''); ?>">
                        <div class="s-res-content">
                            <h2 class="s-res-item-title">
                                <a href="index.php?pfad=showArticle&id=<?php echo $item['id']; ?>" class="s-res-link">
                                    <?php echo htmlspecialchars($item['title']); ?>
                                </a>
                            </h2>
                            <div class="s-res-meta-row">
                                <p class="s-res-author">Von: <span class="s-res-author-name"><?php echo htmlspecialchars($item['author']); ?></span></p>

                                <span class="s-res-likes">
                                    ❤️ <?php echo $likesCount; ?>
                                </span>
                            </div>
                        </div>
                        <div class="s-res-arrow">&rarr;</div>
                    </div>
                <?php endforeach; ?>

            <?php elseif (isset($_SESSION["message"]) && $_SESSION["message"] === "invalid_search_query"): ?>
                <p>Unzulässige Suchanfrage</p>

            <?php elseif ($query !== "" && $totalResultsCount === 0 && count($rawResults) > 0): ?>
                <p>Keine Beiträge in dieser Kategorie gefunden.</p>

            <?php elseif ($query !== "" && $totalResultsCount === 0): ?>
                <p>Keine Beiträge zu diesem Suchbegriff gefunden.</p>

            <?php endif; ?>
            <?php unset($_SESSION["message"]); ?>

        </div>

        <div class="s-res-pagination-footer">

            <!-- Auswahl der Ergebnisse pro Seite. Gehört per form="..." logisch
                 zum Filterformular oben -->
            <div class="s-res-limit-selector">
                <label for="s-res-per-page" class="s-res-limit-label">Ergebnisse pro Seite:</label>
                <select id="s-res-per-page" name="limit" form="s-res-filter-form" class="s-res-limit-select">
                    <option value="10" <?php echo $limit === 10 ? 'selected' : ''; ?>>10</option>
                    <option value="20" <?php echo $limit === 20 ? 'selected' : ''; ?>>20</option>
                    <option value="50" <?php echo $limit === 50 ? 'selected' : ''; ?>>50</option>
                    <option value="100" <?php echo $limit === 100 ? 'selected' : ''; ?>>100</option>
                </select>
                <noscript><button type="submit" form="s-res-filter-form" class="nav__search-button">Übernehmen</button></noscript>
            </div>

            <nav class="s-res-page-navigation" aria-label="Seitennavigation">
                <!-- No-JS-Fallback: -->
                <noscript>
                    <?php echo renderNoJsPagination($currentPage, $totalPages, $query, $currentSort, $currentCategory, $limit); ?>
                </noscript>

                <!-- JS-Version: wird per search-results.js befüllt/eingeblendet: -->
                <div id="js-page-navigation" style="display:none;">
                    <button type="button" class="s-res-page-btn" id="prev-page-btn">«</button>
                    <span id="dynamic-page-numbers"></span>
                    <button type="button" class="s-res-page-btn" id="next-page-btn">»</button>
                </div>
            </nav>

        </div>
    </main>

</div>