import type { ColorJson } from "./SymbolJson";
/**
 * Represents settings that affect the environment in which the WebScene is
 * displayed (such as lighting). It is part of the initial state of the WebScene
 * as well as slides in the presentation.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/environment/}.
 */
export interface EnvironmentJson {
    /**
     * Whether the atmosphere should be visualized. This includes sky and haze
     * effects.
     */
    atmosphereEnabled?: boolean | null;
    /**
     * Specifies how the background of the scene (which lies behind sky, stars
     * and atmosphere) should be displayed.
     */
    background?: BackgroundJson | null;
    /**
     * Object containing information on how the scene is lit.
     */
    lighting?: LightingJson | null;
    /**
     * Whether stars should be displayed in the sky.
     */
    starsEnabled?: boolean | null;
    /**
     * Indicates the type of weather visualization in the scene.
     */
    weather?: WeatherJson | null;
}
/**
 * The background of a SceneView that lies behind the sky, atmosphere and stars.
 */
export type BackgroundJson = ColorBackgroundJson;
/**
 * Specifies a single color to fill the background of the scene with. The scene
 * background is displayed behind any scene objects, stars and atmosphere.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/environment_background_color/}.
 */
export interface ColorBackgroundJson {
    /**
     * Color is represented as a three or four-element array.
     */
    color?: ColorJson | null;
    /**
     * The value has to lie between 100 (full transparency) and 0 (full
     * opacity). Web scenes only.
     */
    transparency?: number | null;
    /**
     * The type of background. Web scenes only.
     */
    type: "color";
}
/**
 * Settings for defining the lighting of the scene.
 */
export type LightingJson = SunLightingJson | VirtualLightingJson;
/**
 * Object containing information for the virtual lighting type. The position of
 * the light follows the camera and is set behind the camera with a small offset
 * to the left side.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/sunLighting/}.
 */
export interface VirtualLightingJson {
    /**
     * Indicates whether to show shadows cast by the main light source.
     */
    directShadows?: boolean | null;
    /**
     * The type of lighting.
     */
    type: "virtual";
}
/**
 * Object containing information for the sun lighting type. The position of the
 * light is set to the sun's location.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/sunLighting/}.
 */
export interface SunLightingJson {
    /**
     * The current date and time of the simulated sun. It is a number
     * representing the number of milliseconds since 1 January, 1970 UTC.
     */
    datetime?: number | null;
    /**
     * Indicates whether to show shadows cast by the sun.
     */
    directShadows?: boolean | null;
    /**
     * UTC offset in decimal hours. Not to be applied to datetime for sun
     * position, only to adjust display of datetime in UI. If displayUTCOffset
     * is null, offset is calculated for the current location (approximate
     * only).
     */
    displayUTCOffset?: number | null;
    /**
     * The type of lighting.
     */
    type: "sun";
}
/**
 * Indicates the type of weather visualization in the scene.
 */
export type WeatherJson = CloudyWeatherJson | FoggyWeatherJson | RainyWeatherJson | SunnyWeatherJson | SnowyWeatherJson;
/**
 * Object containing information for changing the weather conditions in the
 * scene to cloudy.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/cloudyWeather/}.
 */
export interface CloudyWeatherJson {
    /**
     * Specifies the amount of cloud cover in the sky.
     */
    cloudCover?: number | null;
    /**
     * The type of weather.
     */
    type: "cloudy";
}
/**
 * Object containing information for changing the weather conditions in the
 * scene to foggy.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/foggyWeather/}.
 */
export interface FoggyWeatherJson {
    /**
     * Specifies the amount of fog used in the scene.
     */
    fogStrength?: number | null;
    /**
     * The type of weather.
     */
    type: "foggy";
}
/**
 * Object containing information for changing the weather conditions in the
 * scene to rainy.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/rainyWeather/}.
 */
export interface RainyWeatherJson {
    /**
     * Specifies the amount of cloud cover in the sky.
     */
    cloudCover?: number | null;
    /**
     * Specifies the amount of snowfall in the scene.
     */
    precipitation?: number | null;
    /**
     * The type of weather.
     */
    type: "rainy";
}
/**
 * Object containing information for changing the weather conditions in the
 * scene to snowy.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/sunnyWeather/}.
 */
export interface SnowyWeatherJson {
    /**
     * Specifies the amount of cloud cover in the sky.
     */
    cloudCover?: number | null;
    /**
     * Specifies the amount of snowfall in the scene.
     */
    precipitation?: number | null;
    /**
     * Display surfaces covered with snow.
     */
    snowCover?: "enabled" | "disabled" | null;
    /**
     * The type of weather.
     */
    type: "snowy";
}
/**
 * Object containing information for changing the weather conditions in the
 * scene to sunny.
 *
 * See
 * {@link https://developers.arcgis.com/web-scene-specification/objects/sunnyWeather/}.
 */
export interface SunnyWeatherJson {
    /**
     * Specifies the amount of cloud cover in the sky.
     */
    cloudCover?: number | null;
    /**
     * The type of weather.
     */
    type: "sunny";
}
