<?php
declare(strict_types=1);

/**
 * /comment_edit.php
 *
 * Відповідає за:
 * - UI редагування коментаря
 * - показ поточного тексту коментаря
 * - показ існуючих вкладень
 * - можливість позначити вкладення на видалення
 * - додавання нових вкладень
 * - передавання POST у /functional/comment/manage.php
 *
 * Це thin-UI:
 * - вся бізнес-логіка edit/delete/delete_attachment живе в functional/comment/manage.php
 */

require_once __DIR__ . '/includes/start.php';
require_once __DIR__ . '/functional/comment/manage.php';

header('X-Robots-Tag: noindex, nofollow, noarchive', true);
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');

require_login();

if (!isset($pdo) || !($pdo instanceof PDO)) {
    $pdo = db();
}
if (!isset($me) || !is_array($me)) {
    $me = current_user();
}

if (!function_exists('h')) {
    function h(?string $s): string
    {
        return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8');
    }
}

if (!function_exists('flash_get')) {
    function flash_get(string $key): ?string
    {
        if (!isset($_SESSION['flash'][$key])) return null;
        $msg = (string)$_SESSION['flash'][$key];
        unset($_SESSION['flash'][$key]);
        return $msg;
    }
}

$title = 'Редагування коментаря';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    cm_handle_request(['default_action' => 'edit']);
    exit;
}

$commentId = (int)($_GET['id'] ?? $_GET['comment_id'] ?? 0);
if ($commentId <= 0) {
    http_response_code(404);
    echo 'Comment not found.';
    exit;
}

$comment = cm_comment_row($pdo, $commentId);
if (!$comment) {
    http_response_code(404);
    echo 'Comment not found.';
    exit;
}

if (!cm_user_can_manage_comment($pdo, $me, $comment)) {
    http_response_code(403);
    echo 'Access denied.';
    exit;
}

$back = comment_safe_back_url((string)($_GET['back'] ?? ($_SERVER['HTTP_REFERER'] ?? '/')));
if ($back === '/' || $back === '') {
    $back = '/';
}

$attachments = [];
if (cm_table_exists($pdo, 'comment_attachments')) {
    $st = $pdo->prepare('SELECT * FROM comment_attachments WHERE comment_id = ? ORDER BY id ASC');
    $st->execute([$commentId]);
    $attachments = $st->fetchAll(PDO::FETCH_ASSOC) ?: [];
}

require __DIR__ . '/includes/header.php';
?>

<div class="container" style="max-width:900px;margin:24px auto;">
  <div class="card" style="padding:20px;">
    <h1 style="margin:0 0 18px;">Редагування коментаря</h1>

    <?php if ($msg = flash_get('err')): ?>
      <div style="margin:0 0 16px;padding:12px 14px;border:1px solid #e0b4b4;border-radius:10px;background:#fff6f6;color:#9f3a38;">
        <?= h($msg) ?>
      </div>
    <?php endif; ?>

    <?php if ($msg = flash_get('ok')): ?>
      <div style="margin:0 0 16px;padding:12px 14px;border:1px solid #b7ebc6;border-radius:10px;background:#f6fff8;color:#1e7a35;">
        <?= h($msg) ?>
      </div>
    <?php endif; ?>

    <form method="post" enctype="multipart/form-data" accept-charset="UTF-8">
      <input type="hidden" name="csrf" value="<?= h(function_exists('csrf_token') ? csrf_token() : '') ?>">
      <input type="hidden" name="action" value="edit">
      <input type="hidden" name="comment_id" value="<?= (int)$commentId ?>">
      <input type="hidden" name="back" value="<?= h($back) ?>">

      <div style="margin-bottom:16px;">
        <label for="comment_body" style="display:block;margin-bottom:8px;font-weight:600;">Текст коментаря</label>
        <textarea
          id="comment_body"
          name="body"
          rows="6"
          style="width:100%;padding:12px;border:1px solid #dcdfe6;border-radius:12px;resize:vertical;box-sizing:border-box;"
        ><?= h((string)($comment['body'] ?? '')) ?></textarea>
      </div>

      <?php if ($attachments): ?>
        <div style="margin-bottom:18px;">
          <div style="font-weight:600;margin-bottom:8px;">Поточні вкладення</div>

          <div style="display:grid;gap:10px;">
            <?php foreach ($attachments as $att): ?>
              <?php
                $attId   = (int)($att['id'] ?? 0);
                $attName = (string)($att['original_name'] ?? '');
                $attPath = (string)($att['path'] ?? $att['rel_path'] ?? '');
                if ($attName === '') {
                    $attName = basename($attPath);
                }
              ?>
              <label style="display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid #eee;border-radius:10px;">
                <input type="checkbox" name="delete_attachment_ids[]" value="<?= $attId ?>">
                <span><?= h($attName) ?></span>
                <?php if ($attPath !== ''): ?>
                  <a href="<?= h($attPath) ?>" target="_blank" rel="noopener" style="margin-left:auto;">Відкрити</a>
                <?php endif; ?>
              </label>
            <?php endforeach; ?>
          </div>

          <div style="margin-top:8px;color:#666;font-size:14px;">
            Познач вкладення галочкою, якщо треба видалити.
          </div>
        </div>
      <?php endif; ?>

      <div style="margin-bottom:18px;">
        <label for="comment_files" style="display:block;margin-bottom:8px;font-weight:600;">Додати нові файли</label>
        <input
          id="comment_files"
          type="file"
          name="attachments[]"
          multiple
          accept="image/*,audio/*,video/*,.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt,.zip,.rar,.7z,.webp"
          style="display:block;width:100%;"
        >
      </div>

      <div style="display:flex;gap:10px;align-items:center;">
        <button type="submit" style="padding:10px 16px;border:0;border-radius:10px;cursor:pointer;">
          Зберегти
        </button>
        <a href="<?= h($back) ?>" style="padding:10px 16px;border:1px solid #ddd;border-radius:10px;text-decoration:none;">
          Скасувати
        </a>
      </div>
    </form>
  </div>
</div>

<?php require __DIR__ . '/includes/footer.php'; ?>