import * as THREE from 'three';
import { AssetLoader, LoadedModel } from '../loaders/AssetLoader';
export interface UseAssetLoaderOptions {
    /** URLs to preload on mount */
    preloadUrls?: string[];
    /** Asset loader instance (uses singleton if not provided) */
    loader?: AssetLoader;
}
export interface AssetLoadingState {
    /** Whether assets are currently loading */
    isLoading: boolean;
    /** Loading progress (0-100) */
    progress: number;
    /** Number of loaded assets */
    loaded: number;
    /** Total assets to load */
    total: number;
    /** Any loading errors */
    errors: string[];
}
export interface UseAssetLoaderReturn extends AssetLoadingState {
    /** Load a single model */
    loadModel: (url: string) => Promise<LoadedModel>;
    /** Load a single OBJ model */
    loadOBJ: (url: string) => Promise<THREE.Group>;
    /** Load a single texture */
    loadTexture: (url: string) => Promise<THREE.Texture>;
    /** Preload multiple assets */
    preload: (urls: string[]) => Promise<void>;
    /** Check if model is cached */
    hasModel: (url: string) => boolean;
    /** Check if texture is cached */
    hasTexture: (url: string) => boolean;
    /** Get cached model */
    getModel: (url: string) => LoadedModel | undefined;
    /** Get cached texture */
    getTexture: (url: string) => THREE.Texture | undefined;
    /** Clear all caches */
    clearCache: () => void;
}
/**
 * Hook for managing 3D asset loading in React components
 *
 * @example
 * ```tsx
 * const { loadModel, isLoading, progress } = useAssetLoader({
 *     preloadUrls: ['/assets/model.glb']
 * });
 *
 * useEffect(() => {
 *     loadModel('/assets/character.glb').then((model) => {
 *         scene.add(model.scene);
 *     });
 * }, []);
 * ```
 */
export declare function useAssetLoader(options?: UseAssetLoaderOptions): UseAssetLoaderReturn;
export default useAssetLoader;
