<?php
$comments = [];
$mainComments = [];
$repliesByParent = [];
$articleObj = null;

include_once 'php/controller/showArticle-controller.php';
/*
 * Ermittelt, ob ohne JavaScript auf einen Kommentar
 * geantwortet werden soll.
 */
$replyTo = filter_input(
        INPUT_GET,
        "reply_to",
        FILTER_VALIDATE_INT
);

$replyAuthor = null;

if ($replyTo !== false && $replyTo !== null) {
    foreach ($mainComments as $mainComment) {
        if ($mainComment->getId() === $replyTo) {
            $replyAuthor = $mainComment->getAuthor();
            break;
        }
    }
}

/*
 * Eine Antwort darf nur auf einen existierenden
 * Hauptkommentar geschrieben werden.
 */
if ($replyAuthor === null) {
    $replyTo = null;
}
?>
<!--
     Seite: Anzeige für Beiträge
     Funktion: Stellt einen übergebenen Beitrag dar.
 -->
<!-- Hauptcontainer für die Beitragsansicht (Ausschließlich der Content-Bereich) -->
<main class="article-view-container">
    <?php include_once "includes/alertMessages.php"?>

    <!-- Metadaten & Titel -->
    <div class="article-view-top-section">

            <div class="category-and-likes-row">
                <?php if (isset($category) && !empty($category)): ?>
                    <span class="article-view-category"><?php echo htmlspecialchars($category); ?></span>
                <?php endif; ?>

                <!-- Like-Anzeige und dynamischer Like-Button  -->
                <?php if (isset($articleObj) && $articleObj !== null): ?>
                    <div class="article-view-likes">
                        <span>❤️ <span class="like-count"><?php echo $articleObj->getLikeCount(); ?></span></span>

                        <?php if (isset($_SESSION["user_email"])): ?>
                            <a href="php/controller/like-controller.php?id=<?php echo $articleObj->getId(); ?>" class="like-toggle-btn">
                                <?php echo $articleObj->hasLiked($_SESSION["user_email"]) ? '👎 Gefällt mir nicht mehr' : '👍 Gefällt mir'; ?>
                            </a>
                        <?php else: ?>
                            <span class="login-hint">(Anmelden zum Liken)</span>
                        <?php endif; ?>
                    </div>
                <?php endif; ?>
            </div>

        <h1 class="article-view-title">
            <?php if (isset($title)) { echo htmlspecialchars($title); } ?>
        </h1>

        <div class="article-view-meta">
            <?php if (isset($name) && !empty($name)): ?>
                <span class="article-view-author">Von: <strong><?php echo htmlspecialchars($name); ?></strong></span>
            <?php endif; ?>
        </div>

    </div>

    <!-- Beitrags-Inhalt -->
    <div class="article-view-content">
        <?php if (isset($content)): ?>
            <?php
            // Versuchen, den Inhalt von JSON in ein PHP-Array umzuwandeln
            $blocks = json_decode($content, true);

            // Wenn das JSON valide ist und Blöcke enthält
            if (json_last_error() === JSON_ERROR_NONE && is_array($blocks)):
                foreach ($blocks as $block):
                    if (isset($block['type']) && isset($block['value'])):
                        if ($block['type'] === 'text'): ?>
                            <!-- Textblock mit XSS-Schutz und Erhalt von Zeilenumbrüchen -->
                            <div class="article-view-body block-text">
                                <?php echo nl2br(htmlspecialchars($block['value'])); ?>
                            </div>
                        <?php elseif ($block['type'] === 'image'): ?>
                            <!-- Bildblock, der auf den relativen Pfad im uploads-Ordner verweist -->
                            <div class="article-view-body block-image">
                                <img src="<?php echo htmlspecialchars($block['value']); ?>" alt="Beitragsbild">
                            </div>
                        <?php endif;
                    endif;
                endforeach;
            else: ?>
                <!-- Fallback: Wenn der Beitrag alten Reintext aus der DB enthält -->
                <div class="article-view-body block-text">
                    <?php echo nl2br(htmlspecialchars($content)); ?>
                </div>
            <?php endif; ?>
        <?php endif; ?>
    </div>

    <!-- Beitrags-Endbereich (Tags) -->
    <?php if (isset($tags) && !empty($tags)): ?>
        <div class="article-view-bottom-section">
            <div class="article-view-tags-label">Tags:</div>
            <div class="article-view-tags-list">
                <?php
                // Falls $tags ein String ist (z.B. "Web, CSS"), in ein Array umwandeln
                $tagArray = is_array($tags) ? $tags : explode(',', $tags);
                foreach ($tagArray as $tag):
                    $trimmedTag = trim($tag);
                    if (!empty($trimmedTag)):
                        ?>
                        <span class="article-view-tag-item"><?php echo htmlspecialchars($trimmedTag); ?></span>
                    <?php
                    endif;
                endforeach;
                ?>
            </div>
        </div>
    <?php endif; ?>

    <section class="article-comments-section" id="comments">
        <h2>Kommentare</h2>

        <?php if (isset($_SESSION["comment_message"])): ?>
            <div class="alert-message <?php
            echo ($_SESSION["comment_message_type"] ?? "") === "success"
                    ? "is-success"
                    : "is-error";
            ?>">
                <?php echo htmlspecialchars($_SESSION["comment_message"]); ?>
            </div>

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

        <div id="comments-list">
            <?php if (!empty($mainComments)): ?>
                <?php foreach ($mainComments as $comment): ?>
                    <div class="comment-item"
                         data-comment-id="<?php echo htmlspecialchars(
                                 (string) $comment->getId()
                         ); ?>">

                        <?php
                        $isDeleted = $comment->getContent()
                                === "Dieser Kommentar wurde gelöscht.";
                        ?>

                        <?php if ($isDeleted): ?>

                            <p class="deleted-comment">
                                Dieser Kommentar wurde gelöscht.
                            </p>

                        <?php else: ?>

                            <p>
                                <strong>
                                    <?php echo htmlspecialchars($comment->getAuthor()); ?>
                                </strong>

                                <span>
                <?php echo htmlspecialchars($comment->getCreated()); ?>
            </span>
                            </p>

                            <p>
                                <?php
                                echo nl2br(
                                        htmlspecialchars($comment->getContent())
                                );
                                ?>
                            </p>

                            <?php if (
                                    isset($_SESSION["user_email"])
                                    && $_SESSION["user_email"] === $comment->getAuthor()
                            ): ?>
                                <details class="edit-comment-details">
                                    <summary class="edit-comment-button">
                                        Kommentar bearbeiten
                                    </summary>

                                    <form method="post"
                                          action="index.php?pfad=updateComment"
                                          class="edit-comment-form">

                                        <input type="hidden"
                                               name="comment_id"
                                               value="<?php echo htmlspecialchars(
                                                       (string) $comment->getId()
                                               ); ?>">

                                        <input type="hidden"
                                               name="article_id"
                                               value="<?php echo htmlspecialchars(
                                                       (string) $comment->getArticleId()
                                               ); ?>">

                                        <label for="edit-comment-<?php
                                        echo htmlspecialchars((string) $comment->getId());
                                        ?>">
                                            Kommentar bearbeiten
                                        </label>

                                        <textarea
                                                id="edit-comment-<?php
                                                echo htmlspecialchars((string) $comment->getId());
                                                ?>"
                                                name="content"
                                                required><?php echo htmlspecialchars(
                                                    $comment->getContent()
                                            ); ?></textarea>

                                        <button type="submit" class="button">
                                            Änderungen speichern
                                        </button>
                                    </form>
                                </details>

                                <form method="post"
                                      action="index.php?pfad=deleteComment"
                                      class="delete-comment-form">

                                    <input type="hidden"
                                           name="comment_id"
                                           value="<?php echo htmlspecialchars(
                                                   (string) $comment->getId()
                                           ); ?>">

                                    <input type="hidden"
                                           name="article_id"
                                           value="<?php echo htmlspecialchars(
                                                   (string) $comment->getArticleId()
                                           ); ?>">

                                    <button type="submit"
                                            class="delete-comment-button"
                                            onclick="return confirm('Möchtest du diesen Kommentar wirklich löschen?');">
                                        Kommentar löschen
                                    </button>
                                </form>

                            <?php endif; ?>

                            <?php if (isset($_SESSION["user_email"])): ?>

                                <a href="index.php?pfad=<?php
                                echo urlencode($_GET["pfad"] ?? "showArticle");
                                ?>&id=<?php
                                echo urlencode((string) $comment->getArticleId());
                                ?>&reply_to=<?php
                                echo urlencode((string) $comment->getId());
                                ?>#comment-form"
                                   class="reply-button"
                                   data-comment-id="<?php echo htmlspecialchars(
                                           (string) $comment->getId()
                                   ); ?>"
                                   data-author="<?php echo htmlspecialchars(
                                           $comment->getAuthor()
                                   ); ?>">

                                    Antworten
                                </a>

                            <?php endif; ?>

                        <?php endif; ?>

                        <div class="comment-replies">
                            <?php if (isset($repliesByParent[$comment->getId()])): ?>
                                <?php foreach ($repliesByParent[$comment->getId()] as $reply): ?>
                                    <div class="comment-item comment-reply">

                                        <?php
                                        $isReplyDeleted = $reply->getContent()
                                                === "Dieser Kommentar wurde gelöscht.";
                                        ?>

                                        <?php if ($isReplyDeleted): ?>

                                            <p class="deleted-comment">
                                                Dieser Kommentar wurde gelöscht.
                                            </p>

                                        <?php else: ?>

                                            <p>
                                                <strong>
                                                    <?php echo htmlspecialchars($reply->getAuthor()); ?>
                                                </strong>

                                                <span>
                    <?php echo htmlspecialchars($reply->getCreated()); ?>
                </span>
                                            </p>

                                            <p>
                                                <?php
                                                echo nl2br(
                                                        htmlspecialchars($reply->getContent())
                                                );
                                                ?>
                                            </p>

                                            <?php if (
                                                    isset($_SESSION["user_email"])
                                                    && $_SESSION["user_email"] === $reply->getAuthor()
                                            ): ?>

                                                <details class="edit-comment-details">
                                                    <summary class="edit-comment-button">
                                                        Antwort bearbeiten
                                                    </summary>

                                                    <form method="post"
                                                          action="index.php?pfad=updateComment"
                                                          class="edit-comment-form">

                                                        <input type="hidden"
                                                               name="comment_id"
                                                               value="<?php echo htmlspecialchars(
                                                                       (string) $reply->getId()
                                                               ); ?>">

                                                        <input type="hidden"
                                                               name="article_id"
                                                               value="<?php echo htmlspecialchars(
                                                                       (string) $reply->getArticleId()
                                                               ); ?>">

                                                        <label for="edit-reply-<?php
                                                        echo htmlspecialchars((string) $reply->getId());
                                                        ?>">
                                                            Antwort bearbeiten
                                                        </label>

                                                        <textarea
                                                                id="edit-reply-<?php
                                                                echo htmlspecialchars((string) $reply->getId());
                                                                ?>"
                                                                name="content"
                                                                required><?php echo htmlspecialchars(
                                                                    $reply->getContent()
                                                            ); ?></textarea>

                                                        <button type="submit" class="button">
                                                            Änderungen speichern
                                                        </button>
                                                    </form>
                                                </details>

                                                <form method="post"
                                                      action="index.php?pfad=deleteComment"
                                                      class="delete-comment-form">

                                                    <input type="hidden"
                                                           name="comment_id"
                                                           value="<?php echo htmlspecialchars(
                                                                   (string) $reply->getId()
                                                           ); ?>">

                                                    <input type="hidden"
                                                           name="article_id"
                                                           value="<?php echo htmlspecialchars(
                                                                   (string) $reply->getArticleId()
                                                           ); ?>">

                                                    <button type="submit"
                                                            class="delete-comment-button"
                                                            onclick="return confirm('Möchtest du diesen Kommentar wirklich löschen?');">
                                                        Kommentar löschen
                                                    </button>
                                                </form>

                                            <?php endif; ?>

                                        <?php endif; ?>

                                    </div>
                                <?php endforeach; ?>
                            <?php endif; ?>
                        </div>
                    </div>
                <?php endforeach; ?>
            <?php else: ?>
                <p class="no-comments-message">
                    Noch keine Kommentare vorhanden.
                </p>
            <?php endif; ?>
        </div>

        <?php if (isset($_SESSION["user_email"])): ?>
            <form id="comment-form"
                  method="post"
                  action="php/ajax/add-comment.php">

                <input type="hidden"
                       name="article_id"
                       value="<?php echo htmlspecialchars(
                               (string) ($_GET["id"] ?? "")
                       ); ?>">

                <input type="hidden"
                       name="parent_comment_id"
                       id="parent-comment-id"
                       value="<?php echo $replyTo !== null
                               ? htmlspecialchars((string) $replyTo)
                               : "";
                       ?>">

                <p id="reply-info"
                   class="reply-info"
                        <?php if ($replyAuthor === null): ?>
                            style="display: none;"
                        <?php endif; ?>>

                    <?php if ($replyAuthor !== null): ?>
                        Antwort auf <?php echo htmlspecialchars($replyAuthor); ?>

                        <a href="index.php?pfad=<?php
                        echo urlencode($_GET["pfad"] ?? "showArticle");
                        ?>&id=<?php
                        echo urlencode((string) ($_GET["id"] ?? ""));
                        ?>#comment-form">
                            Abbrechen
                        </a>
                    <?php endif; ?>
                </p>

                <label for="comment-content">
                    Kommentar
                </label>

                <textarea name="content"
                          id="comment-content"
                          placeholder="Schreibe einen Kommentar..."
                          required></textarea>

                <button type="submit" class="button">
                    Kommentar senden
                </button>
            </form>
        <?php else: ?>
            <div class="comment-login-hint">
                <p>Melde dich an, um einen Kommentar zu schreiben.</p>
                <a href="index.php?pfad=login" class="button">Jetzt anmelden</a>
            </div>
        <?php endif; ?>
    </section>
</main>
