<?php
declare(strict_types=1);

/**
 * /admin/board/view.php
 * Перегляд і модерація одного оголошення
 */

require_once dirname(__DIR__, 2) . '/includes/start.php';
require_once dirname(__DIR__, 2) . '/functional/board/_lib.php';

$pdo = brd_db();
$me  = brd_require_admin();

if (!brd_ready($pdo)) {
    http_response_code(500);
    echo 'Board module tables were not found. Run SQL migration first.';
    exit;
}

$adId = (int)($_GET['id'] ?? $_POST['id'] ?? 0);
$ad = brd_load_ad($pdo, $adId);
if (!$ad) {
    http_response_code(404);
    exit('Ad not found.');
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    try {
        if (!brd_csrf_check($_POST['csrf'] ?? null)) {
            throw new RuntimeException(brd_t('Помилка безпеки. Оновіть сторінку.', 'Ошибка безопасности. Обновите страницу.', 'Security error. Refresh the page.'));
        }

        $do = (string)($_POST['do'] ?? '');
        $note = brd_trimmed($_POST['note'] ?? '');

        $pdo->beginTransaction();

        if ($do === 'approve') {
            $st = $pdo->prepare("
                UPDATE board_ads
                SET status = 'approved',
                    published_at = COALESCE(published_at, NOW()),
                    approved_at = NOW(),
                    approved_by_user_id = ?,
                    rejected_at = NULL,
                    rejected_by_user_id = NULL,
                    moderation_note = NULL,
                    updated_at = NOW()
                WHERE id = ?
            ");
            $st->execute([(int)$me['id'], $adId]);
            brd_log_moderation($pdo, $adId, (int)$me['id'], 'approved', $note !== '' ? $note : null);
            $msg = brd_t('Оголошення схвалено.', 'Объявление одобрено.', 'The ad was approved.');
        } elseif ($do === 'reject') {
            $st = $pdo->prepare("
                UPDATE board_ads
                SET status = 'rejected',
                    rejected_at = NOW(),
                    rejected_by_user_id = ?,
                    moderation_note = ?,
                    approved_at = NULL,
                    approved_by_user_id = NULL,
                    updated_at = NOW()
                WHERE id = ?
            ");
            $st->execute([(int)$me['id'], $note !== '' ? $note : null, $adId]);
            brd_log_moderation($pdo, $adId, (int)$me['id'], 'rejected', $note !== '' ? $note : null);
            $msg = brd_t('Оголошення відхилено.', 'Объявление отклонено.', 'The ad was rejected.');
        } elseif ($do === 'archive') {
            $st = $pdo->prepare("UPDATE board_ads SET status = 'archived', updated_at = NOW() WHERE id = ?");
            $st->execute([$adId]);
            brd_log_moderation($pdo, $adId, (int)$me['id'], 'archived', $note !== '' ? $note : null);
            $msg = brd_t('Оголошення перенесено в архів.', 'Объявление перенесено в архив.', 'The ad was archived.');
        } elseif ($do === 'delete') {
            $st = $pdo->prepare("UPDATE board_ads SET status = 'deleted', updated_at = NOW() WHERE id = ?");
            $st->execute([$adId]);
            brd_log_moderation($pdo, $adId, (int)$me['id'], 'deleted', $note !== '' ? $note : null);
            $msg = brd_t('Оголошення позначено як видалене.', 'Объявление помечено как удаленное.', 'The ad was marked as deleted.');
        } else {
            throw new RuntimeException('Unknown action.');
        }

        $pdo->commit();
        brd_flash_set('admin_board', 'success', $msg);
        brd_redirect('/admin/board/view.php?id=' . $adId);
    } catch (Throwable $e) {
        if ($pdo->inTransaction()) {
            $pdo->rollBack();
        }
        brd_flash_set('admin_board', 'danger', $e->getMessage());
        brd_redirect('/admin/board/view.php?id=' . $adId);
    }
}

$ad = brd_load_ad($pdo, $adId) ?: $ad;
$images = brd_ad_images($pdo, $adId);
[$flashType, $flashText] = brd_flash_get('admin_board');

$history = [];
try {
    $st = $pdo->prepare("
        SELECT m.*, u.username, u.full_name
        FROM board_ad_moderation m
        LEFT JOIN users u ON u.id = m.admin_user_id
        WHERE m.ad_id = ?
        ORDER BY m.id DESC
    ");
    $st->execute([$adId]);
    $history = $st->fetchAll(PDO::FETCH_ASSOC) ?: [];
} catch (Throwable $e) {
    $history = [];
}

$title = brd_t('Модерація оголошення', 'Модерация объявления', 'Ad moderation');

require dirname(__DIR__, 2) . '/includes/header.php';
?>
<div class="container my-4">
    <div class="d-flex flex-wrap justify-content-between align-items-center gap-2 mb-3">
        <div>
            <h1 class="h3 m-0"><?= brd_h($title) ?> #<?= (int)$ad['id'] ?></h1>
            <div class="text-muted"><?= brd_h((string)$ad['title']) ?></div>
        </div>
        <div class="d-flex gap-2">
            <a class="btn btn-outline-secondary" href="/admin/board/index.php"><?= brd_h(brd_t('Назад до списку', 'Назад к списку', 'Back to list')) ?></a>
            <a class="btn btn-outline-primary" href="<?= brd_h(brd_ad_url((int)$ad['id'])) ?>" target="_blank" rel="noopener"><?= brd_h(brd_t('Відкрити на сайті', 'Открыть на сайте', 'Open on site')) ?></a>
        </div>
    </div>

    <?php if ($flashType !== '' && $flashText !== ''): ?>
        <div class="alert alert-<?= brd_h($flashType) ?>"><?= brd_h($flashText) ?></div>
    <?php endif; ?>

    <div class="row g-4">
        <div class="col-lg-8">
            <div class="card card-app p-3 mb-3">
                <?php if (trim((string)($ad['main_image_path'] ?? '')) !== ''): ?>
                    <img src="<?= brd_h((string)$ad['main_image_path']) ?>" alt="" class="img-fluid rounded border mb-3" style="max-height:520px;object-fit:contain;background:#f8f9fa;">
                <?php endif; ?>

                <div class="d-flex flex-wrap gap-2 mb-3">
                    <span class="badge bg-<?= brd_h(brd_status_badge_class((string)$ad['status'])) ?>"><?= brd_h(brd_status_label((string)$ad['status'])) ?></span>
                    <?php if (trim((string)($ad['category_name'] ?? '')) !== ''): ?>
                        <span class="badge bg-light text-dark border"><?= brd_h((string)$ad['category_name']) ?></span>
                    <?php endif; ?>
                    <span class="badge bg-success"><?= brd_h(number_format((float)($ad['price_amount'] ?? 0), 2, '.', ' ') . ' ' . (string)($ad['currency_code'] ?? 'UAH')) ?></span>
                </div>

                <div class="row g-3">
                    <div class="col-md-6">
                        <div><strong><?= brd_h(brd_t('Автор', 'Автор', 'Author')) ?>:</strong> <?= brd_h(brd_public_display_name($ad)) ?> (@<?= brd_h((string)$ad['author_username']) ?>)</div>
                        <div><strong>Email:</strong> <?= brd_h((string)($ad['contact_email'] ?? '')) ?></div>
                        <div><strong><?= brd_h(brd_t('Телефон', 'Телефон', 'Phone')) ?>:</strong> <?= brd_h((string)($ad['contact_phone'] ?? '')) ?></div>
                    </div>
                    <div class="col-md-6">
                        <div><strong><?= brd_h(brd_t('Регіон', 'Регион', 'Region')) ?>:</strong> <?= brd_h((string)($ad['region_name'] ?? '')) ?></div>
                        <div><strong><?= brd_h(brd_t('Місто', 'Город', 'City')) ?>:</strong> <?= brd_h((string)($ad['city_name'] ?? '')) ?></div>
                        <div><strong><?= brd_h(brd_t('Сплачено', 'Оплачено', 'Paid')) ?>:</strong> <?= brd_h((string)($ad['publish_price'] ?? 0) . ' VM Coins') ?></div>
                    </div>
                </div>

                <hr>
                <div style="white-space:pre-wrap;"><?= brd_h((string)($ad['description'] ?? '')) ?></div>
            </div>

            <?php if ($images): ?>
                <div class="card card-app p-3">
                    <div class="fw-semibold mb-3"><?= brd_h(brd_t('Додаткові фото', 'Дополнительные фото', 'Additional images')) ?></div>
                    <div class="row g-3">
                        <?php foreach ($images as $img): ?>
                            <div class="col-md-4">
                                <img src="<?= brd_h((string)$img['rel_path']) ?>" alt="" class="img-fluid rounded border" style="width:100%;height:180px;object-fit:cover;">
                            </div>
                        <?php endforeach; ?>
                    </div>
                </div>
            <?php endif; ?>
        </div>

        <div class="col-lg-4">
            <div class="card card-app p-3 mb-3">
                <div class="fw-semibold mb-3"><?= brd_h(brd_t('Дії модератора', 'Действия модератора', 'Moderator actions')) ?></div>

                <form method="post" class="vstack gap-3">
                    <input type="hidden" name="csrf" value="<?= brd_h(brd_csrf_token()) ?>">
                    <input type="hidden" name="id" value="<?= (int)$ad['id'] ?>">

                    <div>
                        <label class="form-label"><?= brd_h(brd_t('Примітка / причина', 'Примечание / причина', 'Note / reason')) ?></label>
                        <textarea name="note" class="form-control" rows="4"><?= brd_h((string)($ad['moderation_note'] ?? '')) ?></textarea>
                    </div>

                    <div class="d-grid gap-2">
                        <button class="btn btn-success" type="submit" name="do" value="approve"><?= brd_h(brd_t('Схвалити', 'Одобрить', 'Approve')) ?></button>
                        <button class="btn btn-danger" type="submit" name="do" value="reject"><?= brd_h(brd_t('Відхилити', 'Отклонить', 'Reject')) ?></button>
                        <button class="btn btn-outline-warning" type="submit" name="do" value="archive"><?= brd_h(brd_t('В архів', 'В архив', 'Archive')) ?></button>
                        <button class="btn btn-outline-dark" type="submit" name="do" value="delete" onclick="return confirm(<?= json_encode(brd_t('Позначити оголошення як видалене?', 'Пометить объявление как удаленное?', 'Mark the ad as deleted?'), JSON_UNESCAPED_UNICODE) ?>)"><?= brd_h(brd_t('Позначити як видалене', 'Пометить как удаленное', 'Mark as deleted')) ?></button>
                    </div>
                </form>
            </div>

            <div class="card card-app p-3">
                <div class="fw-semibold mb-3"><?= brd_h(brd_t('Історія модерації', 'История модерации', 'Moderation history')) ?></div>

                <?php if (!$history): ?>
                    <div class="text-muted"><?= brd_h(brd_t('Історії поки немає.', 'Истории пока нет.', 'No history yet.')) ?></div>
                <?php else: ?>
                    <div class="vstack gap-2">
                        <?php foreach ($history as $item): ?>
                            <div class="border rounded p-2">
                                <div class="fw-semibold"><?= brd_h((string)$item['action']) ?></div>
                                <div class="small text-muted">
                                    <?= brd_h((string)$item['created_at']) ?>
                                    <?php if (trim((string)($item['full_name'] ?? '')) !== ''): ?>
                                        · <?= brd_h((string)$item['full_name']) ?>
                                    <?php endif; ?>
                                </div>
                                <?php if (trim((string)($item['note'] ?? '')) !== ''): ?>
                                    <div class="small mt-1"><?= brd_h((string)$item['note']) ?></div>
                                <?php endif; ?>
                            </div>
                        <?php endforeach; ?>
                    </div>
                <?php endif; ?>
            </div>
        </div>
    </div>
</div>
<?php require dirname(__DIR__, 2) . '/includes/footer.php'; ?>
