import { type Bounds3 } from "./Geometry";
import { type EnvironmentLightingOptions, type RenderItem } from "./ForwardPass";
import { type ExternalParityContactShadowPlan } from "./shadows/ContactShadows";
export type EnvironmentCapabilityId = "cubemap-renderer" | "equirectangular-projection" | "pmrem-generator" | "atmospheric-scattering" | "analytical-studio-box" | "linear-fog" | "exponential-fog" | "rgbe-hdr-parser" | "exr-parser" | "cube-camera-reflections" | "dynamic-ocean-plane" | "procedural-sky-dome" | "volumetric-weather-enclosure" | "infinite-ground-grid" | "indoor-studio-stage" | "outdoor-nature-backdrop" | "urban-city-shell" | "industrial-warehouse-void" | "deep-space-box" | "clean-void-backdrop";
export type EnvironmentCapabilityStatus = "implemented" | "partial" | "helper" | "missing";
export interface EnvironmentCapability {
    readonly id: EnvironmentCapabilityId;
    readonly label: string;
    readonly status: EnvironmentCapabilityStatus;
    readonly reusable: boolean;
    readonly evidence: readonly string[];
    readonly gap: string;
    readonly requiredForAcceptedClaim: string;
}
export interface EnvironmentCapabilityReport {
    readonly requestedCount: number;
    readonly implementedCount: number;
    readonly partialCount: number;
    readonly helperCount: number;
    readonly missingCount: number;
    readonly productionReadyCount: number;
    readonly nonProductionReadyCount: number;
    readonly productionReady: readonly EnvironmentCapabilityId[];
    readonly backlog: readonly EnvironmentCapability[];
    readonly capabilities: readonly EnvironmentCapability[];
}
export type EnvironmentStagePresetId = "clean-void" | "indoor-studio" | "outdoor-nature" | "urban-city" | "industrial-warehouse" | "deep-space";
export type EnvironmentStudioTone = "standard" | "premium-dark" | "product-premium";
export type EnvironmentContactGroundingMode = "auto" | "off" | "contact-shadow";
export type EnvironmentPresetType = EnvironmentStagePresetId | "studio" | "outdoor" | "city" | "warehouse" | "ocean" | "space";
export type EnvironmentPresetLighting = "softbox" | "sunset" | "overcast" | "night" | "neon" | "warehouse" | "space";
export type EnvironmentPresetBackground = "cubemap" | "equirect" | "sky" | "procedural" | "none";
export type EnvironmentPresetGround = "grid" | "shadow-catcher" | "reflective-floor" | "terrain" | "none";
export type EnvironmentFeatureRequest = "cubemap-background" | "equirect-background" | "reflective-floor" | "terrain-heightfield" | "rectangular-area-light" | "cube-camera-reflection" | "planar-reflection" | "transmission-refraction" | "linear-fog" | "exponential-fog" | "volumetric-fog" | "fft-webgpu-water" | "water-caustics" | "underwater-volume";
export type EnvironmentFogMode = "linear" | "exponential" | "exponential-squared";
export type EnvironmentFogPresetId = "distant-haze" | "morning-mist" | "marine-layer" | "night-smog" | "warehouse-dust";
export type EnvironmentFogInput = EnvironmentFogPresetId | EnvironmentFogOptions | false;
export interface EnvironmentFogOptions {
    readonly preset?: EnvironmentFogPresetId;
    readonly mode?: EnvironmentFogMode;
    readonly color?: Rgb;
    readonly near?: number;
    readonly far?: number;
    readonly density?: number;
    readonly heightFalloff?: number;
    readonly heightReference?: number;
    readonly maxOpacity?: number;
    readonly sampleDistances?: readonly number[];
}
export interface EnvironmentFogUniforms {
    readonly u_environmentFogEnabled: 1;
    readonly u_environmentFogMode: 1 | 2 | 3;
    readonly u_environmentFogColor: Rgb;
    readonly u_environmentFogNear: number;
    readonly u_environmentFogFar: number;
    readonly u_environmentFogDensity: number;
    readonly u_environmentFogHeightFalloff: number;
    readonly u_environmentFogHeightReference: number;
    readonly u_environmentFogMaxOpacity: number;
}
export interface EnvironmentFogTelemetry {
    readonly mode: EnvironmentFogMode;
    readonly preset: EnvironmentFogPresetId;
    readonly capabilityIds: readonly EnvironmentCapabilityId[];
    readonly sampleDistances: readonly number[];
    readonly sampleFactors: readonly number[];
    readonly monotonicDistanceResponse: boolean;
    readonly uniformKeys: readonly string[];
    readonly claimBoundary: string;
    readonly limitations: readonly string[];
}
export interface EnvironmentFogProfile {
    readonly preset: EnvironmentFogPresetId;
    readonly mode: EnvironmentFogMode;
    readonly color: Rgb;
    readonly near: number;
    readonly far: number;
    readonly density: number;
    readonly heightFalloff: number;
    readonly heightReference: number;
    readonly maxOpacity: number;
    readonly capabilityIds: readonly EnvironmentCapabilityId[];
    readonly uniforms: EnvironmentFogUniforms;
    readonly telemetry: EnvironmentFogTelemetry;
    readonly limitations: readonly string[];
}
export interface EnvironmentStageOptions {
    readonly preset?: EnvironmentStagePresetId;
    readonly size?: number;
    readonly floorY?: number;
    readonly gridDivisions?: number;
    readonly timeSeconds?: number;
    readonly studioTone?: EnvironmentStudioTone;
    readonly includeSkyDome?: boolean;
    readonly includeStageShell?: boolean;
    readonly includeGroundGrid?: boolean;
    readonly includeStageAccents?: boolean;
    readonly contactGrounding?: EnvironmentContactGroundingMode | EnvironmentContactGroundingOptions;
}
export interface EnvironmentContactGroundingOptions {
    readonly mode?: EnvironmentContactGroundingMode;
    readonly casterRadius?: number;
    readonly receiverDistance?: number;
    readonly softness?: number;
    readonly opacity?: number;
    readonly layerCount?: number;
    readonly anisotropy?: number;
    readonly yOffset?: number;
    readonly label?: string;
}
export interface EnvironmentContactGrounding {
    readonly mode: "contact-shadow";
    readonly plan: ExternalParityContactShadowPlan;
    readonly items: readonly RenderItem[];
    readonly receiverLabel: string;
    readonly limitations: readonly string[];
}
export interface EnvironmentStage {
    readonly preset: EnvironmentStagePresetId;
    readonly items: readonly RenderItem[];
    readonly bounds: Bounds3;
    readonly lighting: EnvironmentLightingOptions;
    readonly systems: readonly string[];
    readonly capabilityIds: readonly EnvironmentCapabilityId[];
    readonly limitations: readonly string[];
    readonly contactGrounding?: EnvironmentContactGrounding;
}
export interface EnvironmentPresetOptions extends Omit<EnvironmentStageOptions, "preset" | "includeSkyDome" | "includeGroundGrid"> {
    readonly type?: EnvironmentPresetType;
    readonly lighting?: EnvironmentPresetLighting;
    readonly background?: EnvironmentPresetBackground;
    readonly ground?: EnvironmentPresetGround;
    readonly fog?: EnvironmentFogInput;
    readonly requestedFeatures?: readonly EnvironmentFeatureRequest[];
}
export interface EnvironmentUnsupportedRequestDisclosure {
    readonly request: EnvironmentFeatureRequest;
    readonly supported: false;
    readonly capabilityIds: readonly EnvironmentCapabilityId[];
    readonly fallback: string;
    readonly disclosure: string;
}
export interface EnvironmentUnsupportedRequestDisclosureOptions {
    readonly type?: EnvironmentPresetType;
    readonly lighting?: EnvironmentPresetLighting;
    readonly background?: EnvironmentPresetBackground;
    readonly ground?: EnvironmentPresetGround;
    readonly fog?: EnvironmentFogInput | EnvironmentFogProfile;
    readonly requestedFeatures?: readonly EnvironmentFeatureRequest[];
}
export interface EnvironmentPreset extends EnvironmentStage {
    readonly type: EnvironmentPresetType;
    readonly lightingPreset: EnvironmentPresetLighting;
    readonly background: EnvironmentPresetBackground;
    readonly ground: EnvironmentPresetGround;
    readonly fog?: EnvironmentFogProfile;
    readonly unsupportedRequests: readonly string[];
    readonly unsupportedRequestDetails: readonly EnvironmentUnsupportedRequestDisclosure[];
}
type Rgb = readonly [number, number, number];
type Rgba = readonly [number, number, number, number];
export declare function listEnvironmentCapabilities(): readonly EnvironmentCapability[];
export declare function createEnvironmentCapabilityReport(): EnvironmentCapabilityReport;
export declare function createInfiniteGroundGrid(options?: {
    readonly size?: number;
    readonly divisions?: number;
    readonly y?: number;
    readonly color?: Rgba;
    readonly label?: string;
}): RenderItem;
export declare function createProceduralSkyDome(options?: {
    readonly preset?: EnvironmentStagePresetId;
    readonly radius?: number;
    readonly color?: Rgba;
    readonly y?: number;
    readonly label?: string;
}): RenderItem;
export declare function createEnvironmentStage(options?: EnvironmentStageOptions): EnvironmentStage;
export declare function createEnvironmentFogProfile(options?: EnvironmentFogPresetId | EnvironmentFogOptions): EnvironmentFogProfile;
export declare function sampleEnvironmentFogFactor(fog: Pick<EnvironmentFogProfile, "mode" | "near" | "far" | "density" | "heightFalloff" | "heightReference" | "maxOpacity">, distance: number, worldY?: number): number;
export declare function applyEnvironmentFogToColor(color: Rgb, fog: EnvironmentFogProfile, distance: number, worldY?: number): Rgb;
export declare function createEnvironmentPreset(options?: EnvironmentPresetOptions): EnvironmentPreset;
export declare function createEnvironmentUnsupportedRequestDisclosures(options?: EnvironmentUnsupportedRequestDisclosureOptions): readonly EnvironmentUnsupportedRequestDisclosure[];
export {};
//# sourceMappingURL=EnvironmentPlatform.d.ts.map