<?php
/**
 * POST /modules/turnero/api/rellamar.php
 * Re-llama un turno que ya está en_recepcion: actualiza llamado_recepcion_at = NOW()
 * para que la pantalla TV detecte el cambio y vuelva a anunciar/animar.
 *
 * Body JSON:
 *   turno_id  int  requerido
 */

require_once __DIR__ . '/_helpers.php';
require_once __DIR__ . '/../../../classes/lab/ActividadAdmin.php';
requireMethod('POST');
requireTurnero();

$datos   = inputJson();
$turnoId = (int)($datos['turno_id'] ?? 0);
$deskId  = isset($datos['desk_id']) ? (int)$datos['desk_id'] : null;

if (!$turnoId) jsonError('turno_id es obligatorio.', 400);

$pdo  = db();
$stmt = $pdo->prepare(
    "UPDATE turnero_turnos
        SET llamado_recepcion_at = NOW(),
            recepcion_desk_id    = COALESCE(?, recepcion_desk_id)
      WHERE id = ? AND estado = 'en_recepcion'"
);
$stmt->execute([$deskId, $turnoId]);

if ($stmt->rowCount() === 0) {
    jsonError('El turno no está en estado en_recepcion o no existe.', 404);
}

// Notificar SSE para que las pantallas se actualicen inmediatamente
$stmtS = $pdo->prepare('UPDATE turnero_sesiones SET sse_ping_at = NOW() WHERE id = (SELECT sesion_id FROM turnero_turnos WHERE id = ?)');
$stmtS->execute([$turnoId]);

// Devolver el turno actualizado para que recepcion.php abra la ficha
$stmtT = $pdo->prepare(
    "SELECT t.*,
            p.codigo AS prioridad_codigo,
            p.nombre AS prioridad_nombre,
            p.color  AS prioridad_color
       FROM turnero_turnos t
       JOIN turnero_prioridades p ON p.id = t.prioridad_id
      WHERE t.id = ?"
);
$stmtT->execute([$turnoId]);
$turno = $stmtT->fetch(PDO::FETCH_ASSOC);

// El rellamado pisa llamado_recepcion_at, así que sin esto no queda rastro de
// cuántas veces se llamó al paciente ni quién lo hizo.
try {
    (new ActividadAdmin())->registrar(
        adminId(), 'turnero', 'rellamar', $turnoId,
        ['turno_id' => $turnoId, 'turno_codigo' => $turno['codigo'] ?? null]
    );
} catch (\Throwable $e) {
    error_log('[rellamar] auditoría: ' . $e->getMessage());
}

jsonOk(['turno' => $turno]);
