false, 'message' => 'Método no permitido. Use POST']); exit(); } try { $input = json_decode(file_get_contents('php://input'), true); if (!$input) $input = $_POST; if (!isset($input['id'])) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'Falta el campo obligatorio: id']); exit(); } $id = (int)$input['id']; // 1) Obtener datos completos de la reserva $stmt = $pdo->prepare(" SELECT r.id, r.codigo, r.fecha, r.hora_inicio, r.hora_fin_prevista, r.duracion_bloques, r.importe, r.estado, r.referencia_bizum, 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, c.codigo AS cabina_codigo, c.bloque, c.ubicacion 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 r.id = ? "); $stmt->execute([$id]); $reserva = $stmt->fetch(); if (!$reserva) { http_response_code(404); echo json_encode(['success' => false, 'message' => 'Reserva no encontrada']); exit(); } if (empty($reserva['cliente_email'])) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'El cliente no tiene email registrado']); exit(); } // 2) Crear tabla log_recordatorios si no existe $pdo->exec(" CREATE TABLE IF NOT EXISTS log_recordatorios ( id INT AUTO_INCREMENT PRIMARY KEY, reserva_id INT NOT NULL, cliente_email VARCHAR(255) NOT NULL, tipo ENUM('recordatorio','confirmacion','cancelacion') DEFAULT 'recordatorio', enviado TINYINT(1) DEFAULT 0, error TEXT NULL, fecha_envio TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_reserva (reserva_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci "); // 3) Construir el email $nombreCliente = trim($reserva['cliente_nombre'] . ' ' . $reserva['cliente_apellidos']); $fechaFormateada = date('d/m/Y', strtotime($reserva['fecha'])); $horaInicio = substr($reserva['hora_inicio'], 0, 5); $horaFin = substr($reserva['hora_fin_prevista'], 0, 5); $duracion = ($reserva['duracion_bloques'] * 30) . ' min'; $importe = number_format($reserva['importe'], 2, ',', '.') . ' €'; $estado = str_replace('_', ' ', $reserva['estado']); $asunto = "🐾 PetStop - Recordatorio de tu reserva " . $reserva['codigo']; $cuerpo = "

Recordatorio de reserva

Hola {$nombreCliente},

Te recordamos los detalles de tu próxima reserva en PetStop:

📋 Código reserva: {$reserva['codigo']}
📅 Fecha: {$fechaFormateada}
🕐 Hora entrada: {$horaInicio}
🕐 Hora salida: {$horaFin}
⏱️ Duración: {$duracion}
🏠 Cabina: {$reserva['cabina_codigo']} (Bloque {$reserva['bloque']})
🐾 Mascota: {$reserva['mascota_nombre']} ({$reserva['mascota_especie']})
💶 Importe: {$importe}
📊 Estado: {$estado}

Si tienes cualquier duda o necesitas modificar tu reserva, contáctanos respondiendo a este email o llamando al teléfono del centro.

¡Gracias por confiar en PetStop! 🐾

"; // 4) Enviar email con la API REST de Brevo $email_enviado = false; $error_msg = null; $resultado = enviarEmailSMTP( $reserva['cliente_email'], $asunto, $cuerpo, $nombreCliente ); if ($resultado['success']) { $email_enviado = true; } else { $error_msg = $resultado['error']; error_log('Error enviando recordatorio a ' . $reserva['cliente_email'] . ': ' . $error_msg); } // 5) Registrar en el log $stmtLog = $pdo->prepare(" INSERT INTO log_recordatorios (reserva_id, cliente_email, tipo, enviado, error) VALUES (:reserva_id, :email, 'recordatorio', :enviado, :error) "); $stmtLog->execute([ ':reserva_id' => $id, ':email' => $reserva['cliente_email'], ':enviado' => $email_enviado ? 1 : 0, ':error' => $error_msg ]); // 6) Respuesta al frontend echo json_encode([ 'success' => true, 'message' => $email_enviado ? "Recordatorio enviado a {$reserva['cliente_email']}" : 'No se pudo enviar el email: ' . $error_msg, 'email_enviado' => $email_enviado, 'data' => [ 'reserva_id' => $id, 'codigo' => $reserva['codigo'], 'cliente_email' => $reserva['cliente_email'], 'cliente_nombre'=> $nombreCliente ] ], 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()]); } catch (Exception $e) { http_response_code(500); echo json_encode(['success' => false, 'message' => 'Error: ' . $e->getMessage()]); } ?>