<?php
/**
 * Обработка взаимодействий с сообщением в DOM.
 * Предполагается, что этот скрипт подключен к странице, содержащей указанный HTML.
 * Реализует функции копирования текста, регенерации и удаления сообщений.
 */

// Функция копирования текста из элемента по его ID
function copyText(string $elementId): void
{
    echo "<script>
        function copyTextToClipboard(id) {
            const textElement = document.getElementById(id);
            if (textElement) {
                const range = document.createRange();
                range.selectNodeContents(textElement);
                const selection = window.getSelection();
                selection.removeAllRanges();
                selection.addRange(range);
                try {
                    document.execCommand('copy');
                    alert('Текст скопирован!');
                } catch (err) {
                    alert('Не удалось скопировать текст.');
                }
                // Очистить выделение
                selection.removeAllRanges();
            }
        }
        copyTextToClipboard('$elementId');
    </script>";
}

// Функция регенерации сообщения (обычно запрос к серверу для получения нового контента)
function regenerateMessage(string $messageId): void
{
    // Здесь должен быть AJAX-запрос к серверу для получения нового текста сообщения
    // Ниже пример простого отображения. Реально это нужно реализовать по API.
    echo "<script>
        function regenerate(messageId) {
            // Пример: отправка AJAX-запроса и обновление содержимого
            fetch('regenerate.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({ id: messageId })
            })
            .then(response => response.json())
            .then(data => {
                if (data.success) {
                    document.getElementById('ai-text-' + messageId).innerHTML = data.newContent;
                } else {
                    alert('Не удалось regenerate сообщение.');
                }
            })
            .catch(error => {
                console.error('Ошибка:', error);
                alert('Произошла ошибка при regeneration.');
            });
        }
        regenerate('$messageId');
    </script>";
}

// Функция удаления сообщения
function deleteMessage(string $messageId): void
{
    // В реале нужно отправить запрос на сервер для удаления
    echo "<script>
        function deleteMsg(messageId) {
            if (confirm('Вы уверены, что хотите удалить сообщение?')) {
                fetch('delete_message.php', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({ id: messageId })
                })
                .then(response => response.json())
                .then(data => {
                    if (data.success) {
                        // Удалить элемент из DOM
                        const elem = document.getElementById('msg-pair-' + messageId);
                        if (elem) {
                            elem.remove();
                        }
                    } else {
                        alert('Ошибка при удалении сообщения.');
                    }
                })
                .catch(error => {
                    console.error('Ошибка:', error);
                    alert('Произошла ошибка при удалении.');
                });
            }
        }
        deleteMsg('$messageId');
    </script>";
}

/**
 * Использование: вставите вызовы функций в обработчики событий кнопок
 * Примеры:
 * <button onclick="copyText('ai-text-e7211a4b-32dc-4a2f-b485-5f3a6d54d0f7')">Копировать</button>
 * <button onclick="regenerateMessage('e7211a4b-32dc-4a2f-b485-5f3a6d54d0f7')">Регенерировать</button>
 * <button onclick="deleteMessage('e7211a4b-32dc-4a2f-b485-5f3a6d54d0f7')">Удалить</button>
 */
?>

Пояснение:

  • В коде реализованы JavaScript функции, вызываемые по onclick кнопок.
  • Функции используют fetch API для взаимодействия с сервером (подразумеваемые скрипты regenerate.php и delete_message.php).
  • Для копирования текста используется document.execCommand('copy') внутри функции copyTextToClipboard.
  • В реальной системе добавьте соответствующие серверные скрипты, обрабатывающие запросы и возвращающие JSON-ответы.