import type Point from "../../geometry/Point.js";
import type MosaicRule from "../../layers/support/MosaicRule.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { MosaicRuleProperties } from "../../layers/support/MosaicRule.js";
import type { PointProperties } from "../../geometry/Point.js";

export interface BaseImageMeasureParametersProperties {
  /**
   * Specifies the [mosaic rule](https://developers.arcgis.com/javascript/latest/references/core/layers/support/MosaicRule/) on how individual images should be mosaicked
   * when the measure is computed. When a mosaic rule is not specified, the current settings on the [ImageryLayer.mosaicRule](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#mosaicRule) will be used.
   *
   * @since 4.27
   */
  mosaicRule?: MosaicRuleProperties | null;
  /**
   * Specifies the pixel size. If pixel size is not specified, `pixelSize` will default to the base resolution of the image service.
   * The raster at the specified pixel size in the mosaic dataset will be used for the Measure calculation.
   *
   * @since 4.27
   */
  pixelSize?: PointProperties;
}

/**
 * Base class for imagery mensuration operations.
 *
 * @since 4.27
 */
export default abstract class BaseImageMeasureParameters extends JSONSupport {
  /**
   * Specifies the [mosaic rule](https://developers.arcgis.com/javascript/latest/references/core/layers/support/MosaicRule/) on how individual images should be mosaicked
   * when the measure is computed. When a mosaic rule is not specified, the current settings on the [ImageryLayer.mosaicRule](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/#mosaicRule) will be used.
   *
   * @since 4.27
   */
  get mosaicRule(): MosaicRule | null | undefined;
  set mosaicRule(value: MosaicRuleProperties | null | undefined);
  /**
   * Specifies the pixel size. If pixel size is not specified, `pixelSize` will default to the base resolution of the image service.
   * The raster at the specified pixel size in the mosaic dataset will be used for the Measure calculation.
   *
   * @since 4.27
   */
  get pixelSize(): Point;
  set pixelSize(value: PointProperties);
}