false, 'message' => 'Método no permitido']); exit(); } $estado_filtro = isset($_GET['estado']) ? $_GET['estado'] : null; // ✅ SELECT ampliado con usuario_id, mascota_id, cabina_id, mascota_peso $sql = "SELECT r.id, r.codigo, r.usuario_id, r.mascota_id, r.cabina_id, r.fecha, r.hora_inicio, r.hora_fin_prevista, r.hora_fin_real, r.duracion_bloques, r.importe, r.estado, r.referencia_bizum, r.codigo_qr, r.qr_activo, r.operador_aprobacion, r.fecha_aprobacion, r.hora_entrada_real, r.hora_salida_real, u.dni AS cliente_dni, u.nombre AS cliente_nombre, u.apellidos AS cliente_apellidos, u.email AS cliente_email, u.telefono AS cliente_telefono, m.nombre AS mascota_nombre, m.especie AS mascota_especie, m.raza AS mascota_raza, m.peso AS mascota_peso, c.codigo AS cabina_codigo, c.bloque, c.ubicacion, c.tamanio FROM reservas r JOIN usuarios u ON r.usuario_id = u.id JOIN mascotas m ON r.mascota_id = m.id JOIN cabinas c ON r.cabina_id = c.id WHERE 1=1"; $params = []; if ($estado_filtro && $estado_filtro !== 'TODAS') { $sql .= " AND r.estado = :estado"; $params[':estado'] = $estado_filtro; } $sql .= " ORDER BY r.fecha DESC, r.hora_inicio DESC"; $stmt = $pdo->prepare($sql); $stmt->execute($params); $reservas = $stmt->fetchAll(); // Calcular estadísticas $stats = [ 'total' => count($reservas), 'pendientes_pago' => 0, 'pendientes_aprobacion' => 0, 'confirmadas' => 0, 'activas' => 0, 'finalizadas' => 0, 'canceladas' => 0, 'ingresos_hoy' => 0, 'ingresos_semana' => 0, 'ingresos_mes' => 0 ]; $hoy = date('Y-m-d'); $inicio_semana = date('Y-m-d', strtotime('monday this week')); $inicio_mes = date('Y-m-01'); foreach ($reservas as $r) { if ($r['estado'] === 'pendiente_pago') $stats['pendientes_pago']++; if ($r['estado'] === 'pagada_pendiente_aprobacion') $stats['pendientes_aprobacion']++; if ($r['estado'] === 'confirmada') $stats['confirmadas']++; if ($r['estado'] === 'activa') $stats['activas']++; if ($r['estado'] === 'finalizada') $stats['finalizadas']++; if ($r['estado'] === 'cancelada') $stats['canceladas']++; if (in_array($r['estado'], ['confirmada', 'activa', 'finalizada'])) { $importe = floatval($r['importe']); if ($r['fecha'] === $hoy) { $stats['ingresos_hoy'] += $importe; } if ($r['fecha'] >= $inicio_semana) { $stats['ingresos_semana'] += $importe; } if ($r['fecha'] >= $inicio_mes) { $stats['ingresos_mes'] += $importe; } } } echo json_encode([ 'success' => true, 'message' => 'Reservas obtenidas para administración', 'data' => $reservas, 'stats' => $stats, 'total' => count($reservas) ], 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() ]); } ?>