using Lattice.Core.Geometry;
namespace Lattice.UI.DragDrop.Abstractions;
///
/// Хост для отображения визуальных элементов перетаскивания.
///
///
///
/// Интерфейс предоставляет абстракцию для управления визуальными элементами
/// перетаскивания в различных UI-фреймворках (WPF, Avalonia, MAUI и т.д.).
///
///
/// Реализация должна обеспечивать корректное отображение визуальных элементов
/// поверх других элементов UI и их своевременное удаление при завершении операций.
///
///
public interface IDragDropHost
{
///
/// Показывает визуальное представление перетаскиваемого элемента.
///
/// Визуальное представление элемента для перетаскивания.
/// Начальная позиция визуального элемента в экранных координатах.
///
///
/// Метод должен отобразить переданный визуальный элемент в указанной позиции.
/// Визуальный элемент должен следовать за курсором мыши при обновлении через .
///
///
/// Визуальный элемент должен отображаться поверх всех других элементов интерфейса.
///
///
void ShowDragVisual(object dragVisual, Point position);
///
/// Обновляет позицию визуального представления перетаскивания.
///
/// Визуальное представление, позиция которого должна быть обновлена.
/// Новая позиция в экранных координатах.
///
/// Метод должен обновлять позицию уже отображаемого визуального элемента
/// с минимальной задержкой для плавного перемещения.
///
void UpdateDragVisualPosition(object dragVisual, Point position);
///
/// Скрывает визуальное представление перетаскивания.
///
/// Визуальное представление для скрытия.
///
/// После вызова этого метода визуальный элемент должен быть полностью
/// удален из визуального дерева и его ресурсы освобождены.
///
void HideDragVisual(object dragVisual);
///
/// Показывает визуальную обратную связь для цели сброса.
///
/// Элемент обратной связи для отображения.
///
///
/// Метод должен отобразить элемент обратной связи (например, подсветку, рамку или индикатор позиции)
/// для визуального указания возможности сброса на целевой элемент.
///
///
/// Элемент обратной связи должен отображаться поверх целевого элемента, но под перетаскиваемым визуальным элементом.
///
///
void ShowDropAdorner(IDropVisualAdorner adorner);
///
/// Скрывает визуальную обратную связь для цели сброса.
///
/// Элемент обратной связи для скрытия.
///
/// После вызова этого метода элемент обратной связи должен быть
/// удален из визуального дерева и его ресурсы освобождены.
///
void HideDropAdorner(IDropVisualAdorner adorner);
}