import type { JSONSupport } from "../../core/JSONSupport.js";

export interface Symbol3DVerticalOffsetProperties extends Partial<Pick<Symbol3DVerticalOffset, "maxWorldLength" | "minWorldLength">> {
  /**
   * Vertical symbol offset in screen size. This value may be autocast with
   * a string expressing size in points or pixels (e.g. `12px`).
   *
   * @default 0
   */
  screenLength?: number | string;
}

/**
 * Shifts a symbol along the vertical world axis by a given height. The height is set in screen space units
 * like points or pixels.
 *
 * @see [PointSymbol3D.verticalOffset](https://developers.arcgis.com/javascript/latest/references/core/symbols/PointSymbol3D/#verticalOffset)
 * @see [LabelSymbol3D.verticalOffset](https://developers.arcgis.com/javascript/latest/references/core/symbols/LabelSymbol3D/#verticalOffset)
 * @see [Sample: Using callout lines with labels](https://developers.arcgis.com/javascript/latest/sample-code/visualization-label-callout/)
 */
export default class Symbol3DVerticalOffset extends JSONSupport {
  constructor(properties?: Symbol3DVerticalOffsetProperties);
  /**
   * The maximum vertical symbol offset in world units. It acts as an upper bound to avoid vertical offset becoming too big.
   *
   * In the following animation the green symbols have `maxWorldLength = 50` and orange symbols don't have `maxWorldLength` set:
   *
   * ![maxWorldLength](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3D-line-callout-maxWorldLength.gif)
   */
  accessor maxWorldLength: number | null | undefined;
  /**
   * The minimum vertical symbol offset in world units. It acts as a lower bound to avoid vertical offset becoming too small.
   *
   * In the following animation the green symbol on the left has `minWorldLength = 20` and for the orange symbol on the right `minWorldLength` has not been set:
   *
   * ![minWorldLength-on](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbols3D-line-callout-minWorldLength.gif)
   *
   * @default 0
   */
  accessor minWorldLength: number;
  /**
   * Vertical symbol offset in screen size. This value may be autocast with
   * a string expressing size in points or pixels (e.g. `12px`).
   *
   * @default 0
   */
  get screenLength(): number;
  set screenLength(value: number | string);
  /**
   * Creates a deep clone of the vertical offset.
   *
   * @returns A deep clone of the object that
   *                                             invoked this method.
   */
  clone(): Symbol3DVerticalOffset;
}