<?php
declare(strict_types=1);

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

require_once __DIR__ . '/includes/start.php';
require_once __DIR__ . '/functional/post/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') {
    pm_handle_request(['default_action' => 'edit']);
    exit;
}

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

$post = pm_post_row($pdo, $postId);
if (!$post) {
    http_response_code(404);
    echo 'Post not found.';
    exit;
}

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

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

$attachments = pm_post_attachment_rows($pdo, $postId);

$pollQuestion = '';
$pollOptions  = ['', '', '', ''];

if (pm_table_exists($pdo, 'post_polls') && pm_table_exists($pdo, 'post_poll_options')) {
    $stPoll = $pdo->prepare('SELECT id, question FROM post_polls WHERE post_id = ? ORDER BY id DESC LIMIT 1');
    $stPoll->execute([$postId]);
    $poll = $stPoll->fetch(PDO::FETCH_ASSOC) ?: null;

    if ($poll) {
        $pollQuestion = (string)($poll['question'] ?? '');

        $stOpts = $pdo->prepare('SELECT option_text FROM post_poll_options WHERE poll_id = ? ORDER BY sort_order ASC, id ASC');
        $stOpts->execute([(int)$poll['id']]);
        $opts = $stOpts->fetchAll(PDO::FETCH_COLUMN) ?: [];

        $opts = array_map(static fn($v) => (string)$v, $opts);
        $pollOptions = array_slice(array_pad($opts, 4, ''), 0, 4);
    }
}

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="post_id" value="<?= (int)$postId ?>">
      <input type="hidden" name="back" value="<?= h($back) ?>">

      <div style="margin-bottom:16px;">
        <label for="post_body" style="display:block;margin-bottom:8px;font-weight:600;">Текст поста</label>
        <textarea
          id="post_body"
          name="body"
          rows="8"
          style="width:100%;padding:12px;border:1px solid #dcdfe6;border-radius:12px;resize:vertical;box-sizing:border-box;"
        ><?= h((string)($post['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="post_files" style="display:block;margin-bottom:8px;font-weight:600;">Додати нові файли</label>
        <input
          id="post_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="margin-bottom:18px;padding:14px;border:1px solid #eee;border-radius:12px;">
        <div style="font-weight:600;margin-bottom:10px;">Опитування</div>

        <div style="margin-bottom:10px;">
          <label for="poll_question" style="display:block;margin-bottom:6px;">Питання</label>
          <input
            id="poll_question"
            type="text"
            name="poll_question"
            value="<?= h($pollQuestion) ?>"
            style="width:100%;padding:10px;border:1px solid #dcdfe6;border-radius:10px;box-sizing:border-box;"
          >
        </div>

        <div style="display:grid;gap:10px;">
          <div>
            <label for="poll_opt_1" style="display:block;margin-bottom:6px;">Варіант 1</label>
            <input id="poll_opt_1" type="text" name="poll_options[]" value="<?= h($pollOptions[0] ?? '') ?>" style="width:100%;padding:10px;border:1px solid #dcdfe6;border-radius:10px;box-sizing:border-box;">
          </div>
          <div>
            <label for="poll_opt_2" style="display:block;margin-bottom:6px;">Варіант 2</label>
            <input id="poll_opt_2" type="text" name="poll_options[]" value="<?= h($pollOptions[1] ?? '') ?>" style="width:100%;padding:10px;border:1px solid #dcdfe6;border-radius:10px;box-sizing:border-box;">
          </div>
          <div>
            <label for="poll_opt_3" style="display:block;margin-bottom:6px;">Варіант 3</label>
            <input id="poll_opt_3" type="text" name="poll_options[]" value="<?= h($pollOptions[2] ?? '') ?>" style="width:100%;padding:10px;border:1px solid #dcdfe6;border-radius:10px;box-sizing:border-box;">
          </div>
          <div>
            <label for="poll_opt_4" style="display:block;margin-bottom:6px;">Варіант 4</label>
            <input id="poll_opt_4" type="text" name="poll_options[]" value="<?= h($pollOptions[3] ?? '') ?>" style="width:100%;padding:10px;border:1px solid #dcdfe6;border-radius:10px;box-sizing:border-box;">
          </div>
        </div>

        <div style="margin-top:8px;color:#666;font-size:14px;">
          Щоб прибрати опитування повністю — залиш питання порожнім або менше ніж 2 варіанти.
        </div>
      </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'; ?>