import { ImportAssetOptions, ImportResult, ProcessRawOptions } from './IAssetImporter';
import { BaseEvent, EventDispatcher } from 'three';
import { ISerializedConfig, IViewerPlugin, ThreeViewer } from '../viewer';
import { AssetImporter } from './AssetImporter';
import { IAsset } from './IAsset';
import { AddObjectOptions } from '../core';
import { MaterialManager } from './MaterialManager';
import { GLTFLoader2 } from './import';
import { ValOrArr } from 'ts-browser-helpers';
import { AssetExporter } from './AssetExporter';
import { GLTFWriter2 } from './export';
import type { GLTFLoaderPlugin, GLTFParser } from 'three/examples/jsm/loaders/GLTFLoader';
import { GLTFExporterPlugin } from 'three/examples/jsm/exporters/GLTFExporter';
export interface AssetManagerOptions {
    /**
     * simple memory based cache for downloaded files, default = false
     */
    simpleCache?: boolean;
    /**
     * Cache Storage for downloaded files, can use with `caches.open`
     * When true and by default uses `caches.open('threepipe-assetmanager')`, set to false to disable
     * @default true
     */
    storage?: Cache | Storage | boolean;
}
export interface AddAssetOptions extends AddObjectOptions {
    /**
     * Automatically set any loaded HDR, EXR file as the scene environment map
     * @default true
     */
    autoSetEnvironment?: boolean;
    /**
     * Automatically set any loaded image(ITexture) file as the scene background
     */
    autoSetBackground?: boolean;
}
export type ImportAddOptions = ImportAssetOptions & AddAssetOptions;
export type AddRawOptions = ProcessRawOptions & AddAssetOptions;
/**
 * Asset Manager
 *
 * Utility class to manage import, export, and material management.
 * @category Asset Manager
 */
export declare class AssetManager extends EventDispatcher<BaseEvent & {
    data?: ImportResult;
}, 'loadAsset' | 'processStateUpdate'> {
    readonly viewer: ThreeViewer;
    readonly importer: AssetImporter;
    readonly exporter: AssetExporter;
    readonly materials: MaterialManager;
    private _storage?;
    get storage(): Storage | Cache | undefined;
    constructor(viewer: ThreeViewer, { simpleCache, storage }?: AssetManagerOptions);
    addAsset<T extends ImportResult = ImportResult>(assetOrPath?: string | IAsset | IAsset[] | File | File[], options?: ImportAddOptions): Promise<(T | undefined)[]>;
    loadImported<T extends ValOrArr<ImportResult | undefined> = ImportResult>(imported: T, { autoSetEnvironment, autoSetBackground, ...options }?: AddAssetOptions): Promise<T | never[]>;
    /**
     * same as {@link loadImported}
     * @param imported
     * @param options
     */
    addProcessedAssets<T extends ImportResult | undefined = ImportResult>(imported: (T | undefined)[], options?: AddAssetOptions): Promise<(T | undefined)[]>;
    addAssetSingle<T extends ImportResult = ImportResult>(asset?: string | IAsset | File, options?: ImportAssetOptions): Promise<T | undefined>;
    addRaw<T extends (ImportResult | undefined) = ImportResult>(res: T | T[], options?: AddRawOptions): Promise<(T | undefined)[]>;
    addRawSingle<T extends ImportResult | undefined = ImportResult | undefined>(res: T, options?: AddRawOptions): Promise<T | undefined>;
    private _sceneUpdated;
    dispose(): void;
    protected _addImporters(): void;
    private _gltfExporter;
    protected _addExporters(): void;
    private _initCacheStorage;
    protected _setupObjectProcess(): void;
    /**
     * State of download/upload/process/other processes in the viewer.
     * Subscribes to importer and exporter by default, more can be added by plugins like {@link FileTransferPlugin}
     */
    processState: Map<string, {
        state: string;
        progress?: number | undefined;
    }>;
    /**
     * Set process state for a path
     * Progress should be a number between 0 and 100
     * Pass undefined in value to remove the state
     * @param path
     * @param value
     */
    setProcessState(path: string, value: {
        state: string;
        progress?: number | undefined;
    } | undefined): void;
    protected _setupProcessState(): void;
    gltfExtensions: {
        name: string;
        import: (parser: GLTFParser) => GLTFLoaderPlugin;
        export: (parser: GLTFWriter2) => GLTFExporterPlugin;
        textures?: Record<string, string | number>;
    }[];
    protected _setupGltfExtensions(): void;
    protected _loaderCreate({ loader }: {
        loader: GLTFLoader2;
    }): void;
    registerGltfExtension(ext: AssetManager['gltfExtensions'][number]): void;
    unregisterGltfExtension(name: string): void;
    /**
     * @deprecated use addRaw instead
     * @param res
     * @param options
     */
    addImported<T extends (ImportResult | undefined) = ImportResult>(res: T | T[], options?: AddRawOptions): Promise<(T | undefined)[]>;
    /**
     * @deprecated use addAsset instead
     * @param path
     * @param options
     */
    addFromPath(path: string, options?: ImportAddOptions): Promise<any[]>;
    /**
     * @deprecated use {@link ThreeViewer.exportConfig} instead
     * @param binary - if set to false, encodes all the array buffers to base64
     */
    exportViewerConfig(binary?: boolean): Record<string, any>;
    /**
     * @deprecated use {@link ThreeViewer.exportPluginsConfig} instead
     * @param filter
     */
    exportPluginPresets(filter?: string[]): import("../viewer").ISerializedViewerConfig;
    /**
     * @deprecated use {@link ThreeViewer.exportPluginConfig} instead
     * @param plugin
     */
    exportPluginPreset(plugin: IViewerPlugin): ISerializedConfig | Record<string, never>;
    /**
     * @deprecated use {@link ThreeViewer.importPluginConfig} instead
     * @param json
     * @param plugin
     */
    importPluginPreset(json: any, plugin?: IViewerPlugin): Promise<IViewerPlugin<ThreeViewer, boolean> | undefined>;
    /**
     * @deprecated use {@link ThreeViewer.importConfig} instead
     * @param viewerConfig
     */
    importViewerConfig(viewerConfig: any): Promise<IViewerPlugin<ThreeViewer, boolean> | undefined>;
    /**
     * @deprecated use {@link ThreeViewer.fromJSON} instead
     * @param viewerConfig
     */
    applyViewerConfig(viewerConfig: any, resources?: any): ThreeViewer | null;
    /**
     * @deprecated moved to {@link ThreeViewer.loadConfigResources}
     * @param json
     * @param extraResources - preloaded resources in the format of viewer config resources.
     */
    importConfigResources(json: any, extraResources?: any): Promise<any>;
    /**
     * @deprecated not a plugin anymore
     */
    static readonly PluginType = "AssetManager";
}
//# sourceMappingURL=AssetManager.d.ts.map