import type WebSceneEnvironment from "../../../webscene/Environment.js";
import type { SunLightingProperties } from "./SunLighting.js";
import type { LightingUnion } from "./types.js";
import type { VirtualLightingProperties } from "./VirtualLighting.js";
import type { EnvironmentProperties as WebSceneEnvironmentProperties } from "../../../webscene/Environment.js";

/** @since 5.0 */
export interface EnvironmentProperties extends WebSceneEnvironmentProperties {
  /**
   * Indicates the type of lighting in the scene.
   *
   *   Known Value | Example
   *   ------------|---------
   *   [SunLighting](https://developers.arcgis.com/javascript/latest/references/core/views/3d/environment/SunLighting/) | ![scene-sun-lighting](https://developers.arcgis.com/javascript/latest/assets/references/core/views/SunLighting.jpg)
   *   [VirtualLighting](https://developers.arcgis.com/javascript/latest/references/core/views/3d/environment/VirtualLighting/) | ![scene-virtual-lighting](https://developers.arcgis.com/javascript/latest/assets/references/core/views/VirtualLighting.jpg)
   *
   * @since 5.0
   */
  lighting?: ((SunLightingProperties & { type?: "sun" }) | (VirtualLightingProperties & { type: "virtual" }));
}

/** @since 5.0 */
export default class Environment extends WebSceneEnvironment {
  /** @since 5.0 */
  constructor(properties?: EnvironmentProperties);
  /**
   * Indicates the type of lighting in the scene.
   *
   *   Known Value | Example
   *   ------------|---------
   *   [SunLighting](https://developers.arcgis.com/javascript/latest/references/core/views/3d/environment/SunLighting/) | ![scene-sun-lighting](https://developers.arcgis.com/javascript/latest/assets/references/core/views/SunLighting.jpg)
   *   [VirtualLighting](https://developers.arcgis.com/javascript/latest/references/core/views/3d/environment/VirtualLighting/) | ![scene-virtual-lighting](https://developers.arcgis.com/javascript/latest/assets/references/core/views/VirtualLighting.jpg)
   *
   * @since 5.0
   */
  get lighting(): LightingUnion;
  set lighting(value: ((SunLightingProperties & { type?: "sun" }) | (VirtualLightingProperties & { type: "virtual" })));
  /**
   * Indicates if weather visualization is available. This read-only property is
   * `true` only in global scenes at low altitudes. It is `false` in local scenes or at high altitudes.
   *
   * @since 5.0
   */
  get weatherAvailable(): boolean;
}