false, 'message' => 'Método no permitido']); exit(); } $sql = "SELECT r.id AS reserva_id, m.nombre AS mascota_nombre, m.especie, m.raza, m.peso, c.codigo AS jaula_codigo, c.bloque, r.hora_entrada_real, r.hora_fin_prevista, r.fecha FROM reservas r JOIN mascotas m ON r.mascota_id = m.id JOIN cabinas c ON r.cabina_id = c.id WHERE r.estado IN ('confirmada', 'activa') ORDER BY r.hora_entrada_real DESC"; $stmt = $pdo->query($sql); $mascotas = $stmt->fetchAll(); // Calcular tiempo dentro y hora de salida para cada mascota $ahora = new DateTime(); foreach ($mascotas as &$m) { if (!empty($m['hora_entrada_real'])) { $entrada = new DateTime($m['hora_entrada_real']); $diff = $ahora->diff($entrada); $minutos = ($diff->h * 60) + $diff->i; $m['minutos_dentro'] = $minutos; $m['texto_tiempo'] = $minutos . ' min'; } else { // Aún no ha entrado, usar hora_inicio prevista $m['minutos_dentro'] = 0; $m['texto_tiempo'] = 'Pendiente entrada'; } // Formatear hora de salida if (!empty($m['hora_fin_prevista'])) { $m['hora_salida'] = substr($m['hora_fin_prevista'], 0, 5); } else { $m['hora_salida'] = '--:--'; } } echo json_encode([ 'success' => true, 'message' => 'Mascotas activas obtenidas', 'data' => $mascotas, 'total' => count($mascotas) ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); } catch (PDOException $e) { http_response_code(500); echo json_encode([ 'success' => false, 'message' => 'Error en el servidor', 'error' => $e->getMessage() ]); } ?>