import { Engine, type DiagnosticsSnapshot } from "@aura3d/core";
import { type RenderDeviceDiagnostics, type RendererOptions } from "@aura3d/rendering";
import { type AssetViewerWorkflowOptions, type A3DWorkflowResult, type InteractiveSceneWorkflowOptions, type MaterialStudioWorkflowOptions, type ProductConfiguratorWorkflowOptions, type SceneShowcaseWorkflowOptions } from "@aura3d/workflows";
export type A3DAppQualityPreset = "draft" | "balanced" | "production";
export type A3DAppWorkflowPreset = "asset-viewer" | "product-configurator" | "material-studio" | "scene-showcase" | "interactive-scene";
export interface A3DAppQualitySettings {
    readonly preset: A3DAppQualityPreset;
    readonly width: number;
    readonly height: number;
    readonly antialias: boolean;
    readonly preserveDrawingBuffer: boolean;
    readonly targetFormat: "rgba8" | "rgba16f";
    readonly diagnostics: readonly string[];
}
export interface A3DAppOptions {
    readonly canvas?: HTMLCanvasElement | OffscreenCanvas;
    readonly quality?: A3DAppQualityPreset;
    readonly width?: number;
    readonly height?: number;
    readonly rendererFactory?: (options: RendererOptions) => Promise<A3DAppRendererLike>;
}
export interface A3DAppRendererLike {
    render(source: A3DWorkflowResult["source"], camera?: A3DWorkflowResult["camera"]): RenderDeviceDiagnostics;
    dispose?(): void;
}
export interface A3DAppDiagnostics {
    readonly appState: "ready" | "disposed";
    readonly quality: A3DAppQualitySettings;
    readonly workflowRuns: number;
    readonly lastWorkflow?: A3DAppWorkflowPreset;
    readonly lastRender?: RenderDeviceDiagnostics;
    readonly engine: DiagnosticsSnapshot;
}
export interface A3DApp {
    readonly engine: Engine;
    readonly renderer?: A3DAppRendererLike;
    readonly quality: A3DAppQualitySettings;
    renderWorkflow(preset: "asset-viewer", options: AssetViewerWorkflowOptions): Promise<A3DWorkflowResult>;
    renderWorkflow(preset: "product-configurator", options: ProductConfiguratorWorkflowOptions): Promise<A3DWorkflowResult>;
    renderWorkflow(preset: "material-studio", options?: MaterialStudioWorkflowOptions): Promise<A3DWorkflowResult>;
    renderWorkflow(preset: "scene-showcase", options?: SceneShowcaseWorkflowOptions): Promise<A3DWorkflowResult>;
    renderWorkflow(preset: "interactive-scene", options?: InteractiveSceneWorkflowOptions): Promise<A3DWorkflowResult>;
    renderWorkflow(preset: A3DAppWorkflowPreset, options?: unknown): Promise<A3DWorkflowResult>;
    diagnostics(): A3DAppDiagnostics;
    dispose(): Promise<void>;
}
export declare const A3D_APP_WORKFLOW_PRESETS: readonly A3DAppWorkflowPreset[];
export declare function resolveA3DAppQualityPreset(preset?: A3DAppQualityPreset, overrides?: Pick<A3DAppOptions, "width" | "height">): A3DAppQualitySettings;
export declare function createA3DApp(options?: A3DAppOptions): Promise<A3DApp>;
//# sourceMappingURL=index.d.ts.map