/**
 * This object contains helper methods for generating a [RasterShadedReliefRenderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/RasterShadedReliefRenderer/) to render elevation values in raster layers (i.e. [ImageryLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/), [ImageryTileLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryTileLayer/)).
 *
 * The [createRenderer()](https://developers.arcgis.com/javascript/latest/references/core/smartMapping/raster/renderers/shadedRelief/#createRenderer) method in this module generates a renderer that may be applied directly to the input layer.
 *
 * @since 4.20
 */
import type RasterShadedReliefRenderer from "../../../renderers/RasterShadedReliefRenderer.js";
import type AlgorithmicColorRamp from "../../../rest/support/AlgorithmicColorRamp.js";
import type MultipartColorRamp from "../../../rest/support/MultipartColorRamp.js";
import type { RasterRendererParameters } from "./types.js";

export interface RasterShadedReliefParameters extends RasterRendererParameters {
  /** The preferred hillshade type. See [RasterShadedReliefRenderer.hillshadeType](https://developers.arcgis.com/javascript/latest/references/core/renderers/RasterShadedReliefRenderer/#hillshadeType) for more information. */
  hillshadeType?: RasterShadedReliefRenderer["hillshadeType"];
  /**
   * Applies a constant or adjusted z-factor
   *   based on resolution changes. The shaded result is scaled dynamically by adjusting the z-factor
   *   using one of two options. See [RasterShadedReliefRenderer.hillshadeType](https://developers.arcgis.com/javascript/latest/references/core/renderers/RasterShadedReliefRenderer/#hillshadeType) for more information.
   *
   * @default none
   */
  scalingType?: RasterShadedReliefRenderer["scalingType"];
  /**
   * The color ramp to apply to the renderer.
   *   By default, the color ramp is grayscale.
   */
  colorRamp?: AlgorithmicColorRamp | MultipartColorRamp;
}

/**
 * The result object of the [createRenderer()](https://developers.arcgis.com/javascript/latest/references/core/smartMapping/raster/renderers/shadedRelief/#createRenderer) method. See the table
 * below for details of each property.
 */
export interface RasterShadedReliefResult {
  /** The RasterShadedReliefRenderer renderer to apply to the input layer. */
  renderer: RasterShadedReliefRenderer;
}

/**
 * Generates a [RasterShadedReliefRenderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/RasterShadedReliefRenderer/) to render elevation data.
 *
 * @param parameters - Input parameters for generating a shaded relief visualization.
 * @returns Resolves with an object containing a RasterShadedReliefRenderer that can be set
 *   on the input renderer.
 */
export function createRenderer(parameters: RasterShadedReliefParameters): Promise<RasterShadedReliefResult>;