import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { Symbol3DEmissiveSource } from "./types.js";

/** @since 5.0 */
export interface Symbol3DEmissiveProperties extends Partial<Pick<Symbol3DEmissive, "source" | "strength">> {}

/**
 * [Symbol3DEmissive](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DEmissive/) is used to define an object as light emitter. It can be set as part of a
 * [Symbol3DMaterial](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DMaterial/) on a volumetric [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/Symbol3DLayer/).
 *
 * > [!WARNING]
 * >
 * > **Known Limitations**
 * >
 * > [Symbol3DEmissive](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DEmissive/) is not supported on [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/IconSymbol3DLayer/),[LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/LineSymbol3DLayer/),
 * > [WaterSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/WaterSymbol3DLayer/), [TextSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/TextSymbol3DLayer/) and [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/FillSymbol3DLayer/) on
 * > [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PolygonSymbol3D/).
 *
 * Example:
 * ```js
 * let symbol = {
 *    type: "polygon-3d",  // autocasts as new PolygonSymbol3D()
 *    symbolLayers: [{
 *       type: "extrude",  // autocasts as new ExtrudeSymbol3DLayer()
 *       size: 100000,
 *       material: {  // autocasts as new Symbol3DMaterial()
 *          color: "red"
 *          emissive: {  // autocasts as new Symbol3DEmissive()
 *             source: "color",
 *             strength: 2
 *          }
 *       }
 *    }]
 * };
 * ```
 *
 * @since 5.0
 */
export class Symbol3DEmissive extends Symbol3DEmissiveSuperclass {
  /** @since 5.0 */
  constructor(properties?: Symbol3DEmissiveProperties);
  /**
   * The emissive source defines whether the emissive values are derived from an underlying model or the combined color
   * information of the symbology.
   *
   * Value | Description
   * ------|------------
   * emissive | Applies emissive texture and/or emissive factor from underlying models.
   * color | Applies the symbol material combined color as emissive color.
   *
   * @default "emissive"
   * @since 5.0
   */
  accessor source: Symbol3DEmissiveSource;
  /**
   * The emissive strength of this material.
   *
   * @default 1
   * @since 5.0
   */
  accessor strength: number;
}
declare const Symbol3DEmissiveSuperclass: typeof JSONSupport & typeof ClonableMixin