false, 'error' => 'message_id es requerido']); exit; } $db = Database::getInstance(); $sql = "SELECT c.id as id, c.user_id as user_id, c.content as content, c.message_id as message_id, c.media_url, c.local_file, c.local_thumb, c.filename, c.mime_type, c.direction, c.message_type, c.status, c.created_at, c.reply_to_message_id, c.reaction_emoji, c.reaction_to_message_id FROM conversations c WHERE c.message_id = :mid OR c.id = :mid LIMIT 1"; $row = $db->fetch($sql, ['mid' => $mid]); if (!$row) { echo json_encode(['success' => true, 'data' => null]); exit; } // build external media similar to get_user_messages $external = (isset($row['media_url']) && $row['media_url']) ? (preg_match('#^https?://#i', $row['media_url']) ? $row['media_url'] : ("api/get_media.php?id=" . urlencode($row['media_url']))) : null; $msg = [ 'id' => intval($row['id']), 'user_id' => intval($row['user_id']), 'content' => $row['content'] ?? '', 'message_id' => $row['message_id'] ?? null, 'media_url' => null, 'local_file' => $row['local_file'] ?? null, 'local_thumb' => $row['local_thumb'] ?? null, 'media_url_external' => $external, 'filename' => $row['filename'] ?? null, 'mime_type' => $row['mime_type'] ?? null, 'direction' => $row['direction'] ?? 'incoming', 'message_type' => $row['message_type'] ?? 'text', 'status' => $row['status'] ?? 'sent', 'created_at' => $row['created_at'], 'reply_to_message_id' => $row['reply_to_message_id'] ?? null, 'reaction_emoji' => $row['reaction_emoji'] ?? null, 'reaction_to_message_id' => $row['reaction_to_message_id'] ?? null ]; echo json_encode(['success' => true, 'data' => $msg]); } catch (Exception $e) { http_response_code(500); error_log('get_message.php error: ' . $e->getMessage()); echo json_encode(['success' => false, 'error' => 'Error interno']); }