import * as L from 'leaflet';
import { TurfHelper } from '../turf-helper';
import type { Feature, Polygon, MultiPolygon } from 'geojson';
import type { PolydrawConfig } from '../types/polydraw-interfaces';
import { ModeManager } from './mode-manager';
import { EventManager } from './event-manager';
export interface DrawResult {
    success: boolean;
    polygon?: Feature<Polygon | MultiPolygon>;
    error?: string;
}
export interface PolygonDrawManagerDependencies {
    turfHelper: TurfHelper;
    map: L.Map;
    config: PolydrawConfig;
    modeManager: ModeManager;
    eventManager: EventManager;
    tracer: L.Polyline;
}
/**
 * PolygonDrawManager handles all user-facing drawing actions.
 * This includes freehand drawing and point-to-point drawing functionality.
 */
export declare class PolygonDrawManager {
    private turfHelper;
    private map;
    private config;
    private modeManager;
    private eventManager;
    private tracer;
    private p2pMarkers;
    private isModifierKeyHeld;
    private markerModifierHandlers;
    constructor(dependencies: PolygonDrawManagerDependencies);
    /**
     * Handle mouse move during freehand drawing
     */
    mouseMove(event: L.LeafletMouseEvent | TouchEvent): void;
    /**
     * Handle mouse up/leave to complete freehand drawing
     */
    mouseUpLeave(event: L.LeafletMouseEvent | TouchEvent): Promise<DrawResult>;
    /**
     * Handle point-to-point click
     */
    /**
     * Set the modifier key status
     * @param isHeld - Whether the modifier key is held down
     */
    setModifierKey(isHeld: boolean): void;
    /**
     * Handle point-to-point click
     */
    handlePointToPointClick(clickLatLng: L.LatLng): void;
    /**
     * Handle double-click to complete point-to-point polygon
     */
    handleDoubleClick(e: L.LeafletMouseEvent): void;
    /**
     * Complete point-to-point polygon drawing
     */
    completePointToPointPolygon(): void;
    /**
     * Cancel point-to-point drawing
     */
    cancelPointToPointDrawing(): void;
    /**
     * Clear all P2P markers
     */
    clearP2pMarkers(): void;
    /**
     * Reset the tracer
     */
    resetTracer(): void;
    /**
     * Check if clicking on the first point to close polygon
     */
    private isClickingFirstPoint;
    /**
     * Update the tracer polyline based on P2P markers
     */
    private updateP2PTracer;
    /**
     * Delete a P2P marker
     */
    private deleteP2PMarker;
    /**
     * Get current P2P markers (for external access)
     */
    getP2pMarkers(): L.Marker[];
    /**
     * Check if currently in point-to-point drawing mode
     */
    isInPointToPointMode(): boolean;
    /**
     * Get current tracer points count
     */
    getTracerPointsCount(): number;
    /**
     * Set up the first marker with special properties
     */
    private setupFirstMarker;
    /**
     * Handle marker hover for edge deletion feedback
     */
    private onMarkerHoverForEdgeDeletion;
}
//# sourceMappingURL=polygon-draw-manager.d.ts.map