import * as L from 'leaflet';
import { TurfHelper } from '../turf-helper';
import { PolygonInformationService } from '../polygon-information.service';
import type { Feature, Polygon, MultiPolygon } from 'geojson';
import type { PolydrawConfig, PolydrawPolygon } from '../types/polydraw-interfaces';
import { ModeManager } from './mode-manager';
import { EventManager } from './event-manager';
export interface InteractionResult {
    success: boolean;
    featureGroups?: L.FeatureGroup[];
    error?: string;
}
export interface PolygonInteractionManagerDependencies {
    turfHelper: TurfHelper;
    polygonInformation: PolygonInformationService;
    map: L.Map;
    config: PolydrawConfig;
    modeManager: ModeManager;
    eventManager: EventManager;
}
/**
 * PolygonInteractionManager handles all interactions with existing polygons.
 * This includes dragging polygons, dragging markers, edge interactions, and popup menus.
 */
export declare class PolygonInteractionManager {
    private markerFeatureGroupMap;
    private markerModifierHandlers;
    private _activeMarker;
    private isDraggingMarker;
    private turfHelper;
    private polygonInformation;
    private map;
    private config;
    private modeManager;
    private eventManager;
    private currentDragPolygon;
    private currentModifierDragMode;
    private isModifierKeyHeld;
    private _openMenuPopup;
    private getFeatureGroups;
    private addFeatureGroup;
    private removeFeatureGroup;
    constructor(dependencies: PolygonInteractionManagerDependencies, featureGroupAccess: {
        getFeatureGroups: () => L.FeatureGroup[];
        addFeatureGroup: (fg: L.FeatureGroup) => void;
        removeFeatureGroup: (fg: L.FeatureGroup) => void;
    });
    /**
     * Add markers to a polygon feature group
     */
    addMarkers(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
    /**
     * Add hole markers to a polygon feature group, with configurable special markers.
     */
    addHoleMarkers(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
    /**
     * Add edge click listeners to a polygon
     */
    addEdgeClickListeners(polygon: L.Polygon, featureGroup: L.FeatureGroup): void;
    /**
     * Enable polygon dragging functionality
     */
    enablePolygonDragging(polygon: PolydrawPolygon, latlngs: Feature<Polygon | MultiPolygon>): void;
    /**
     * Update marker draggable state based on current mode
     */
    updateMarkerDraggableState(): void;
    /**
     * Update all markers for edge deletion visual feedback
     */
    updateAllMarkersForEdgeDeletion(showFeedback: boolean): void;
    /**
     * Update individual marker for edge deletion visual feedback
     */
    updateMarkerForEdgeDeletion(marker: L.Marker, showFeedback: boolean): void;
    /**
     * Set modifier key held state
     */
    setModifierKeyHeld(isHeld: boolean): void;
    private onEdgeClick;
    private highlightEdgeOnHover;
    private elbowClicked;
    private findFeatureGroupForPoly;
    private markerDrag;
    private markerDragEnd;
    private onPolygonMouseMove;
    private onPolygonMouseUp;
    private offsetPolygonCoordinates;
    private updateMarkersAndHoleLinesDuringDrag;
    private updatePolygonAfterDrag;
    private getDragSubtractModifierKey;
    private detectDragSubtractModifierKey;
    private setSubtractVisualMode;
    private updateMarkerColorsForSubtractMode;
    private handleModifierToggleDuringDrag;
    private isModifierDragActive;
    private performModifierSubtract;
    /**
     * Check if two bounding boxes overlap
     */
    private boundingBoxesOverlap;
    private isDragSubtractModifierKeyPressed;
    private getEdgeDeletionModifierKey;
    private isEdgeDeletionModifierKeyPressed;
    private onMarkerHoverForEdgeDeletion;
    private onMarkerHoverForEdgeDeletionEvent;
    private onMarkerLeaveForEdgeDeletionEvent;
    private getMarkerIndex;
    private ensureMarkerSeparation;
    private findAlternativeMarkerPosition;
    private createDivIcon;
    private getLatLngInfoString;
    private generateMenuMarkerPopup;
    private getPolygonGeoJSONFromFeatureGroup;
    private getTotalPolygonPerimeter;
    private generateInfoMarkerPopup;
}
//# sourceMappingURL=polygon-interaction-manager.d.ts.map