import type { JSONSupport, JSONSupportMixinProperties } from "../core/JSONSupport.js";

export interface VirtualLightingProperties extends JSONSupportMixinProperties, Partial<Pick<VirtualLighting, "directShadowsEnabled">> {}

/**
 * The virtual lighting object is part of the [webscene/Environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html) and contains information
 * relating to how a [SceneView](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html) is lit with a virtual light. This class contains all properties which can be persisted in a [WebScene](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html).
 *
 * @since 4.24
 * @see [Environment](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Environment.html)
 */
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/api-reference/esri-symbols-ObjectSymbol3DLayer.html#castShadows),
   *
   * [FillSymbol3DLayer#castShadows](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-FillSymbol3DLayer.html#castShadows),
   * [ExtrudeSymbol3DLayer#castShadows](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-ExtrudeSymbol3DLayer.html#castShadows),
   * and [PathSymbol3DLayer#castShadows](https://developers.arcgis.com/javascript/latest/api-reference/esri-symbols-PathSymbol3DLayer.html#castShadows).
   *
   * @default false
   */
  accessor directShadowsEnabled: boolean;
  /**
   * 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;
}