import type WebSceneSunLighting from "../../../webscene/SunLighting.js";
import type { EventedMixin } from "../../../core/Evented.js";
import type { SunLightingProperties as WebSceneSunLightingProperties } from "../../../webscene/SunLighting.js";

export interface SunLightingProperties extends WebSceneSunLightingProperties, Partial<Pick<SunLighting, "cameraTrackingEnabled">> {
  /**
   * The current date and time of the simulated sun. When setting the date, specifying the time zone is important,
   * otherwise the time zone of the browser will be used. This might lead to different lighting for users in different
   * time zones.
   *
   * @default new Date("March 15, 2022 12:00:00 UTC")
   */
  date?: (Date | number | string);
}

/**
 * The SunLighting class allows you to change the lighting in the scene to sunlight. The position of the light is set to the sun's location.
 *
 * ![scene-lightings](https://developers.arcgis.com/javascript/latest/assets/references/core/views/virtualLightCombined.avif)
 *
 * Example:
 * ```js
 * let view = new SceneView({
 *   container: "viewDiv",
 *
 *   map: new Map({
 *     basemap: "satellite",
 *     ground: "world-elevation"
 *   }),
 *   environment: {
 *     lighting: {
 *       type: "sun"    // autocasts as new SunLighting()
 *     }
 *   }
 * });
 * ```
 * The lighting visualization updates as soon as the type property changes:
 * ```
 * view.environment.lighting = {
 *    type: "sun",
 *    directShadowsEnabled: true    // autocasts as new SunLighting({ directShadowsEnabled: true })
 * }
 * ```
 *
 * @since 4.23
 * @see [Sample - Daylight component](https://developers.arcgis.com/javascript/latest/sample-code/daylight/)
 */
export default class SunLighting extends SunLightingSuperclass {
  constructor(properties?: SunLightingProperties);
  /**
   * Indicates whether the date and time of the simulated sun is automatically updated to maintain the current time of
   * day while the camera changes.
   *
   * @default true
   */
  accessor cameraTrackingEnabled: boolean;
  /**
   * The current date and time of the simulated sun. When setting the date, specifying the time zone is important,
   * otherwise the time zone of the browser will be used. This might lead to different lighting for users in different
   * time zones.
   *
   * @default new Date("March 15, 2022 12:00:00 UTC")
   */
  get date(): Date;
  set date(value: (Date | number | string));
  /** Indicates that the light source is simulated position of the sun. */
  get type(): "sun";
}
declare const SunLightingSuperclass: typeof WebSceneSunLighting & typeof EventedMixin