import type { EventEmit } from '@almadar/core';
import type { IsometricTile, IsometricUnit, IsometricFeature } from '../../types/isometric';
export interface GameCanvas3DEventConfig {
    /** Event name for tile clicks */
    tileClickEvent?: EventEmit<{
        tileId: string;
        x: number;
        z: number;
        type?: string;
        terrain?: string;
        elevation?: number;
    }>;
    /** Event name for unit clicks */
    unitClickEvent?: EventEmit<{
        unitId: string;
        x: number;
        z: number;
        unitType?: string;
        name?: string;
        team?: string;
        faction?: string;
        health?: number;
        maxHealth?: number;
    }>;
    /** Event name for feature clicks */
    featureClickEvent?: EventEmit<{
        featureId: string;
        x: number;
        z: number;
        type?: string;
        elevation?: number;
    }>;
    /** Event name for canvas clicks */
    canvasClickEvent?: EventEmit<{
        clientX: number;
        clientY: number;
        button: number;
    }>;
    /** Event name for tile hover */
    tileHoverEvent?: EventEmit<{
        tileId: string;
        x: number;
        z: number;
        type?: string;
    }>;
    /** Event name for tile leave */
    tileLeaveEvent?: EventEmit<Record<string, never>>;
    /** Event name for unit animation changes */
    unitAnimationEvent?: EventEmit<{
        unitId: string;
        state: string;
        timestamp: number;
    }>;
    /** Event name for camera changes */
    cameraChangeEvent?: EventEmit<{
        position: {
            x: number;
            y: number;
            z: number;
        };
        timestamp: number;
    }>;
}
/** Minimal mouse event interface — satisfied by both React.MouseEvent and ThreeEvent<MouseEvent> */
export interface MinimalMouseEvent {
    clientX: number;
    clientY: number;
    button: number;
}
export interface UseGameCanvas3DEventsOptions extends GameCanvas3DEventConfig {
    /** Callback for tile clicks (direct) */
    onTileClick?: (tile: IsometricTile, event: React.MouseEvent) => void;
    /** Callback for unit clicks (direct) */
    onUnitClick?: (unit: IsometricUnit, event: React.MouseEvent) => void;
    /** Callback for feature clicks (direct) */
    onFeatureClick?: (feature: IsometricFeature, event: React.MouseEvent) => void;
    /** Callback for canvas clicks (direct) */
    onCanvasClick?: (event: React.MouseEvent) => void;
    /** Callback for tile hover (direct) */
    onTileHover?: (tile: IsometricTile | null, event: React.MouseEvent) => void;
    /** Callback for unit animation changes (direct) */
    onUnitAnimation?: (unitId: string, state: string) => void;
}
export interface UseGameCanvas3DEventsReturn {
    /** Handle tile click - emits event and calls callback */
    handleTileClick: (tile: IsometricTile, event: React.MouseEvent) => void;
    /** Handle unit click - emits event and calls callback */
    handleUnitClick: (unit: IsometricUnit, event: React.MouseEvent) => void;
    /** Handle feature click - emits event and calls callback */
    handleFeatureClick: (feature: IsometricFeature, event: React.MouseEvent) => void;
    /** Handle canvas click - emits event and calls callback */
    handleCanvasClick: (event: MinimalMouseEvent) => void;
    /** Handle tile hover - emits event and calls callback */
    handleTileHover: (tile: IsometricTile | null, event: React.MouseEvent) => void;
    /** Handle unit animation - emits event and calls callback */
    handleUnitAnimation: (unitId: string, state: string) => void;
    /** Handle camera change - emits event */
    handleCameraChange: (position: {
        x: number;
        y: number;
        z: number;
    }) => void;
}
/**
 * Hook for integrating GameCanvas3D with the event bus
 *
 * Supports both declarative event props (tileClickEvent) and
 * direct callback props (onTileClick).
 *
 * @example
 * ```tsx
 * const events = useGameCanvas3DEvents({
 *     tileClickEvent: 'TILE_SELECTED',
 *     unitClickEvent: 'UNIT_SELECTED',
 *     onTileClick: (tile) => console.log('Tile:', tile)
 * });
 *
 * // In component:
 * <TileRenderer onTileClick={events.handleTileClick} />
 * ```
 */
export declare function useGameCanvas3DEvents(options: UseGameCanvas3DEventsOptions): UseGameCanvas3DEventsReturn;
export default useGameCanvas3DEvents;
