import type RasterPresetRenderer from "../../renderers/support/RasterPresetRenderer.js";
import type { RasterPresetRendererProperties } from "../../renderers/support/RasterPresetRenderer.js";

export interface RasterPresetRendererMixinProperties extends Partial<Pick<RasterPresetRendererMixin, "activePresetRendererName">> {
  /**
   * A list of preset renderers that defines a preferred renderer for a given multidimensional variable, a given raster function template,
   * or an additional generic predefined renderer.
   *
   * @since 4.31
   */
  presetRenderers?: RasterPresetRendererProperties[] | null;
}

/**
 * RasterPresetRendererMixin is a mixin that adds [activePresetRendererName](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-RasterPresetRendererMixin.html#activePresetRendererName) and [presetRenderers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-RasterPresetRendererMixin.html#presetRenderers)
 * properties on [ImageryLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html) and [ImageryTileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryTileLayer.html).
 */
export abstract class RasterPresetRendererMixin {
  constructor(...args: any[]);
  /**
   * The active preset renderer name. Setting this value will set the layer's `renderer` property to a
   * [RasterPresetRenderer.renderer](https://developers.arcgis.com/javascript/latest/api-reference/esri-renderers-support-RasterPresetRenderer.html#renderer) defined in the [presetRenderers](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-mixins-RasterPresetRendererMixin.html#presetRenderers).
   * If `null`, the layer's renderer will revert to the default or previously set renderer.
   * If the layer's renderer is set then the `activePresetRendererName` will be `null`.
   *
   * @since 4.31
   * @example
   * // to use a preset renderer
   * layer.activePresetRenderer = "temperatureRenderer";
   */
  accessor activePresetRendererName: string | null | undefined;
  /**
   * A list of preset renderers that defines a preferred renderer for a given multidimensional variable, a given raster function template,
   * or an additional generic predefined renderer.
   *
   * @since 4.31
   */
  get presetRenderers(): RasterPresetRenderer[] | null | undefined;
  set presetRenderers(value: RasterPresetRendererProperties[] | null | undefined);
}