import type Glow from "./Glow.js";
import type { JSONSupport } from "../core/JSONSupport.js";
import type { GlowProperties } from "./Glow.js";

export interface VirtualLightingProperties extends Partial<Pick<VirtualLighting, "directShadowsEnabled">> {
  /** This adds a glow effect to the scene for more intensity and scattering of light emitters. */
  glow?: GlowProperties | null;
}

/**
 * The virtual lighting object is part of the [webscene/Environment](https://developers.arcgis.com/javascript/latest/references/core/webscene/Environment/) and contains information
 * relating to how a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/) is lit with a virtual light. This class contains all properties which can be persisted in a [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/).
 *
 * @since 4.24
 * @see [Environment](https://developers.arcgis.com/javascript/latest/references/core/webscene/Environment/)
 */
export default class VirtualLighting extends JSONSupport {
  constructor(properties?: VirtualLightingProperties);
  /**
   * Indicates whether to show shadows cast by the light source.
   * Shadows are only displayed for real world 3D objects. Terrain doesn't cast shadows. In local scenes at small zoom
   * levels, shadows are not displayed. For more control on which 3D objects cast shadows use the `castShadows`
   * property available on [ObjectSymbol3DLayer.castShadows](https://developers.arcgis.com/javascript/latest/references/core/symbols/ObjectSymbol3DLayer/#castShadows),
   *
   * [FillSymbol3DLayer.castShadows](https://developers.arcgis.com/javascript/latest/references/core/symbols/FillSymbol3DLayer/#castShadows),
   * [ExtrudeSymbol3DLayer.castShadows](https://developers.arcgis.com/javascript/latest/references/core/symbols/ExtrudeSymbol3DLayer/#castShadows),
   * and [PathSymbol3DLayer.castShadows](https://developers.arcgis.com/javascript/latest/references/core/symbols/PathSymbol3DLayer/#castShadows).
   *
   * @default false
   */
  accessor directShadowsEnabled: boolean;
  /** This adds a glow effect to the scene for more intensity and scattering of light emitters. */
  get glow(): Glow | null | undefined;
  set glow(value: GlowProperties | null | undefined);
  /**
   * Indicates that the light source is virtual light. Virtual light is top - right position respect to the camera
   * enabling user to observe the scene independant to the possition of the sun.
   */
  get type(): "virtual";
  /**
   * Creates a deep clone of this object.
   *
   * @returns Creates a new clone of the instance calling this method.
   */
  clone(): VirtualLighting;
}