<?php
/**
 * SIGVP — API: Validar / Observar bitácora
 * POST /api/tutor/validar_bitacora.php
 *
 * Body: { id_bitacora, accion: 'validada'|'observada', comentario }
 * Devuelve JSON { ok: true } o { ok: false, msg: '...' }
 */

require_once __DIR__ . '/../../config/app.php';
require_once __DIR__ . '/../../includes/auth.php';
require_once __DIR__ . '/../../includes/functions.php';

header('Content-Type: application/json; charset=utf-8');

startSession(); // ← iniciar sesión ANTES de leer currentUser()
$user = currentUser();
if (!$user || (int)$user['id_rol'] !== ROL_TUTOR) {
    echo json_encode(['ok' => false, 'msg' => 'Sesión expirada. Recarga la página.']);
    exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['ok' => false, 'msg' => 'Método no permitido.']);
    exit;
}

$db = getDB();

// ── Obtener id_tutor ───────────────────────────────────────
$stTutor = $db->prepare("SELECT id_tutor FROM tutores WHERE id_usuario = :uid");
$stTutor->execute([':uid' => $user['id']]);
$tutor = $stTutor->fetch();

if (!$tutor) {
    echo json_encode(['ok' => false, 'msg' => 'Perfil de tutor no configurado.']);
    exit;
}

$idBitacora = (int)($_POST['id_bitacora'] ?? 0);
$accion     = $_POST['accion']    ?? '';
$comentario = trim($_POST['comentario'] ?? '');

// Validar parámetros
if (!$idBitacora) {
    echo json_encode(['ok' => false, 'msg' => 'id_bitacora requerido.']);
    exit;
}
if (!in_array($accion, ['validada', 'observada'])) {
    echo json_encode(['ok' => false, 'msg' => 'Acción inválida.']);
    exit;
}
if ($accion === 'observada' && $comentario === '') {
    echo json_encode(['ok' => false, 'msg' => 'El comentario es obligatorio al observar.']);
    exit;
}

// ── Verificar que la bitácora pertenece a una práctica de este tutor ──
$stCheck = $db->prepare("
    SELECT b.id_bitacora, b.estado
    FROM   bitacoras b
    JOIN   practicas pr ON pr.id_practica = b.id_practica
    WHERE  b.id_bitacora = :bid AND pr.id_tutor = :tid
");
$stCheck->execute([':bid' => $idBitacora, ':tid' => $tutor['id_tutor']]);
$bit = $stCheck->fetch();

if (!$bit) {
    http_response_code(403);
    echo json_encode(['ok' => false, 'msg' => 'No tienes acceso a esta bitácora.']);
    exit;
}

if ($bit['estado'] !== 'enviada') {
    echo json_encode(['ok' => false, 'msg' => 'Solo se pueden validar bitácoras en estado "enviada".']);
    exit;
}

// ── Actualizar ─────────────────────────────────────────────
$db->prepare("
    UPDATE bitacoras
    SET    estado            = :estado,
           comentario_tutor  = :comentario,
           fecha_validacion  = NOW()
    WHERE  id_bitacora = :id
")->execute([
    ':estado'     => $accion,
    ':comentario' => $comentario ?: null,
    ':id'         => $idBitacora,
]);

registrarAudit($user['id'], $accion . '_bitacora', 'bitacoras', $idBitacora);

echo json_encode(['ok' => true, 'accion' => $accion]);