<?php
/**
 * TechShop Perú - Panel Admin: Moderación de Reseñas (Testimonios)
 *
 * Permite aprobar (activo=1), ocultar (activo=0) o eliminar reseñas.
 * Al aprobar/ocultar, recalcula la calificación promedio del producto
 * (solo reseñas aprobadas, conservando el valor actual si no hay ninguna).
 */
define('SECURE_ACCESS', true);
require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/database.php';
require_once __DIR__ . '/../includes/functions.php';

require_admin();
$db = db();

// recalc_producto_rating() se define en includes/functions.php (compartida con
// api/review-add.php) para evitar duplicación de la lógica de recálculo.

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!csrf_verify()) {
        set_flash('error', 'Token de seguridad inválido.');
    } else {
        $accion = $_POST['accion'] ?? '';
        $id = (int) ($_POST['id'] ?? 0);

        if ($id > 0) {
            $stmt = $db->prepare('SELECT producto_id FROM testimonios WHERE id = ?');
            $stmt->execute([$id]);
            $resena = $stmt->fetch();

            if (!$resena) {
                set_flash('error', 'La reseña no existe o ya fue eliminada.');
            } elseif ($accion === 'toggle') {
                $db->prepare('UPDATE testimonios SET activo = 1 - activo WHERE id = ?')->execute([$id]);
                recalc_producto_rating($db, (int) $resena['producto_id']);
                set_flash('success', 'Estado de la reseña actualizado correctamente.');
            } elseif ($accion === 'delete') {
                $db->prepare('DELETE FROM testimonios WHERE id = ?')->execute([$id]);
                recalc_producto_rating($db, (int) $resena['producto_id']);
                set_flash('success', 'Reseña eliminada correctamente.');
            }
        }
    }
    csrf_regenerate();
    redirect('panel-admin-tech/testimonios.php' . (!empty($_POST['estado_filtro']) ? '?estado=' . urlencode($_POST['estado_filtro']) : ''));
}

// Migración segura: garantiza las columnas extra (titulo/foto/compra_verificada)
// existan aunque la BD sea un dump recién importado y nadie haya enviado reseñas.
try {
    $db->exec("ALTER TABLE testimonios ADD COLUMN IF NOT EXISTS titulo VARCHAR(200) DEFAULT NULL");
    $db->exec("ALTER TABLE testimonios ADD COLUMN IF NOT EXISTS foto VARCHAR(255) DEFAULT NULL");
    $db->exec("ALTER TABLE testimonios ADD COLUMN IF NOT EXISTS compra_verificada TINYINT(1) DEFAULT 0");
} catch (Exception $ignored) {}

// ── Filtros ─────────────────────────────────────────────────────────────
$filtro = $_GET['estado'] ?? 'pendientes';
$filtro = in_array($filtro, ['pendientes', 'aprobadas', 'todas'], true) ? $filtro : 'pendientes';

$where = '';
switch ($filtro) {
    case 'pendientes':
        $where = 'WHERE t.activo = 0';
        break;
    case 'aprobadas':
        $where = 'WHERE t.activo = 1';
        break;
}

$stmt = $db->query("
    SELECT t.id, t.producto_id, t.calificacion, t.titulo, t.comentario, t.activo, t.fecha_creacion,
           p.nombre AS producto_nombre, p.slug AS producto_slug,
           CONCAT(u.nombres, ' ', u.apellidos) AS usuario_nombre,
           u.email AS usuario_email
    FROM testimonios t
    JOIN productos p ON t.producto_id = p.id
    LEFT JOIN usuarios u ON t.usuario_id = u.id
    {$where}
    ORDER BY t.fecha_creacion DESC
");
$resenas = $stmt->fetchAll();

$pendientes = (int) $db->query('SELECT COUNT(*) FROM testimonios WHERE activo = 0')->fetchColumn();

$page_title = 'Moderación de Reseñas';
require_once __DIR__ . '/views/layout.php';
?>

<div class="d-flex flex-wrap justify-content-between align-items-center gap-3 mb-4">
    <div>
        <span class="badge bg-warning-subtle text-warning border border-warning-subtle px-3 py-2">
            <i class="bi bi-hourglass-split me-1"></i><?= $pendientes ?> reseña(s) pendiente(s) de aprobación
        </span>
    </div>
    <div class="btn-group">
        <a href="<?= url('panel-admin-tech/testimonios.php?estado=pendientes') ?>" class="btn btn-sm <?= $filtro === 'pendientes' ? 'btn-primary' : 'btn-outline-primary' ?>"><i class="bi bi-hourglass-split me-1"></i>Pendientes</a>
        <a href="<?= url('panel-admin-tech/testimonios.php?estado=aprobadas') ?>" class="btn btn-sm <?= $filtro === 'aprobadas' ? 'btn-primary' : 'btn-outline-primary' ?>"><i class="bi bi-check-circle me-1"></i>Aprobadas</a>
        <a href="<?= url('panel-admin-tech/testimonios.php?estado=todas') ?>" class="btn btn-sm <?= $filtro === 'todas' ? 'btn-primary' : 'btn-outline-primary' ?>"><i class="bi bi-collection me-1"></i>Todas</a>
    </div>
</div>

<div class="table-responsive bg-white rounded shadow-sm p-3">
    <table class="table table-hover align-middle mb-0">
        <thead class="table-light">
            <tr>
                <th>#</th>
                <th>Producto</th>
                <th>Cliente</th>
                <th>Calificación</th>
                <th>Reseña</th>
                <th>Fecha</th>
                <th>Estado</th>
                <th class="text-end">Acciones</th>
            </tr>
        </thead>
        <tbody>
        <?php if (empty($resenas)): ?>
            <tr>
                <td colspan="8" class="text-center text-muted py-4">
                    <i class="bi bi-inbox display-6 d-block mb-2 opacity-50"></i>
                    No hay reseñas en esta vista.
                </td>
            </tr>
        <?php else: ?>
            <?php foreach ($resenas as $r): ?>
            <tr class="<?= $r['activo'] ? '' : 'table-warning' ?>">
                <td><?= (int) $r['id'] ?></td>
                <td>
                    <a href="<?= url('pages/detalle.php?slug=' . urlencode((string) $r['producto_slug'])) ?>" class="text-decoration-none fw-medium"><?= e($r['producto_nombre']) ?></a>
                </td>
                <td>
                    <div class="fw-medium"><?= e($r['usuario_nombre'] ?: 'Anónimo') ?></div>
                    <small class="text-muted"><?= e($r['usuario_email'] ?? '') ?></small>
                </td>
                <td>
                    <span class="text-warning"><?= str_repeat('★', (int) $r['calificacion']) ?><?= str_repeat('☆', 5 - (int) $r['calificacion']) ?></span>
                    <small class="text-muted d-block"><?= (int) $r['calificacion'] ?>/5</small>
                </td>
                <td style="min-width:260px;">
                    <?php if (!empty($r['titulo'])): ?><div class="fw-bold"><?= e($r['titulo']) ?></div><?php endif; ?>
                    <div class="small text-muted"><?= e($r['comentario']) ?></div>
                </td>
                <td><small><?= format_fecha($r['fecha_creacion'], 'd/m/Y H:i') ?></small></td>
                <td>
                    <?= $r['activo']
                        ? '<span class="badge bg-success">Visible</span>'
                        : '<span class="badge bg-warning text-dark">Pendiente</span>' ?>
                </td>
                <td class="text-end">
                    <form method="POST" class="d-inline">
                        <?= csrf_field() ?>
                        <input type="hidden" name="accion" value="toggle">
                        <input type="hidden" name="id" value="<?= (int) $r['id'] ?>">
                        <input type="hidden" name="estado_filtro" value="<?= e($filtro) ?>">
                        <button type="submit" class="btn btn-sm <?= $r['activo'] ? 'btn-outline-secondary' : 'btn-success' ?>"
                                title="<?= $r['activo'] ? 'Ocultar reseña' : 'Aprobar y publicar' ?>">
                            <i class="bi <?= $r['activo'] ? 'bi-eye-slash' : 'bi-check-lg' ?> me-1"></i>
                            <?= $r['activo'] ? 'Ocultar' : 'Aprobar' ?>
                        </button>
                    </form>
                    <form method="POST" class="d-inline" onsubmit="return confirm('¿Eliminar esta reseña definitivamente? Esta acción no se puede deshacer.');">
                        <?= csrf_field() ?>
                        <input type="hidden" name="accion" value="delete">
                        <input type="hidden" name="id" value="<?= (int) $r['id'] ?>">
                        <input type="hidden" name="estado_filtro" value="<?= e($filtro) ?>">
                        <button type="submit" class="btn btn-sm btn-outline-danger" title="Eliminar reseña">
                            <i class="bi bi-trash me-1"></i>Eliminar
                        </button>
                    </form>
                </td>
            </tr>
            <?php endforeach; ?>
        <?php endif; ?>
        </tbody>
    </table>
</div>
