import { Scene } from '../../../../types/src/3d-viewer';
import { BABYLON_ENV_URLS } from '../3d-viewer.constants';

/**
 * Utility class for managing environment textures and skyboxes in Babylon.js scenes.
 * Provides functionality to load, switch, and manage HDR environment textures.
 */
export declare class EnvironmentTools {
    /** Custom skybox path override. When empty, uses predefined skyboxes. */
    static SkyboxPath: string;
    /** Array of predefined environment texture URLs */
    static Skyboxes: BABYLON_ENV_URLS[];
    /** Human-readable names for the predefined skyboxes */
    static SkyboxesNames: string[];
    /** Y-axis rotation values for each skybox to optimize lighting direction */
    static SkyboxesRotation: number[];
    /**
     * Loads an environment texture for the scene.
     * Supports both HDR and prefiltered environment textures.
     *
     * @param scene - The Babylon.js scene to load the texture for
     * @returns The loaded environment texture (HDRCubeTexture or CubeTexture) or null for no environment
     */
    static LoadSkyboxPathTexture(scene: Scene): any;
    /**
     * Gets the name of the currently active skybox.
     *
     * @returns The human-readable name of the active skybox
     */
    static GetActiveSkyboxName(): string;
    /**
     * Resets and reloads the environment texture for the current scene.
     * Also updates any skybox materials to use the new environment texture.
     * Properly disposes of old textures to prevent memory leaks.
     */
    static ResetEnvironmentTexture(): void;
    /**
     * Lighting that casts shadow on models
     */
    static createDirectionalLighting(scene: Scene): void;
    /**
     * Creates a solid ground plane for casting shadow on
     */
    static createSolidGround(scene: Scene): void;
    /**
     * Calculate ground size based on model bounds
     */
    static calculateGroundSize(scene: Scene): number;
    /**
     * Calculate ground position based on model bounds
     */
    static calculateGroundPosition(scene: Scene): number;
    /**
     * Check if mesh is an environment mesh
     */
    private static isEnvironmentMesh;
    /**
     * Changes the active skybox to the specified option.
     * Saves the selection to localStorage and immediately applies the change.
     *
     * @param option - The name of the skybox to switch to (must match SkyboxesNames)
     */
    static changeToSkybox(option: string): void;
    private static constructEnvironmentName;
}
