<?php
/**
 * POST /modules/turnero/api/resetear_toma.php
 * Borra campos específicos de datos_respuestas (firma + hora de una toma).
 * Body JSON: { token: string, campos: string[] }
 */
require_once __DIR__ . '/_helpers.php';
require_once __DIR__ . '/../../../classes/lab/ActividadAdmin.php';
requireMethod('POST');
requireTurnero();

$body   = inputJson();
$token  = trim($body['token'] ?? '');
$campos = $body['campos'] ?? [];

if (!$token) jsonError('token requerido.');
if (!is_array($campos) || empty($campos)) jsonError('campos requerido.');

$pdo  = db();
$stmt = $pdo->prepare(
    "SELECT tc.id, tc.turno_id, tc.datos_respuestas, tc.estado, t.sesion_id, t.codigo,
            f.nombre AS formulario
       FROM turnero_consentimientos tc
       JOIN turnero_turnos t  ON t.id = tc.turno_id
       JOIN lab_formularios f ON f.id = tc.formulario_id
      WHERE tc.token = ? LIMIT 1"
);
$stmt->execute([$token]);
$tc = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$tc) jsonError('Consentimiento no encontrado.', 404);
if ($tc['estado'] !== 'en_progreso') jsonError('Solo se pueden olvidar tomas en estado en_progreso.');

$dr = json_decode($tc['datos_respuestas'] ?? '{}', true) ?? [];
foreach ($campos as $campo) {
    unset($dr[$campo]);
}
$pdo->prepare(
    "UPDATE turnero_consentimientos
        SET datos_respuestas  = ?,
            siguiente_toma_at = NULL,
            toma_inicio_at    = NULL
      WHERE token = ?"
)->execute([json_encode($dr, JSON_UNESCAPED_UNICODE), $token]);

notificarSSE((int)$tc['sesion_id']);

// Olvidar una toma borra datos de un protocolo prolongado en curso: se registra
// qué campos se descartaron, porque después no hay forma de saberlo.
try {
    (new ActividadAdmin())->registrar(
        adminId(),
        'turnero',
        'resetear_toma',
        (int)$tc['id'],
        [
            'turno_id'          => (int)$tc['turno_id'],
            'turno_codigo'      => $tc['codigo'],
            'formulario_nombre' => $tc['formulario'],
            'campos_olvidados'  => $campos,
        ]
    );
} catch (\Throwable $e) {
    error_log('[resetear_toma] auditoría: ' . $e->getMessage());
}

jsonOk([], 'Toma olvidada.');
