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

export interface Edges3DProperties {
  /**
   * The color of the edges.
   * This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,
   * an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/references/core/Color/) object.
   *
   * @default "black"
   */
  color?: ColorLike | null;
  /**
   * A size in points by which to extend edges beyond their original end points.
   *
   * @default 0
   */
  extensionLength?: number | string;
  /**
   * The size of the edges in points. This value may be autocast with a string expressing size in points or pixels (e.g. `12px`).
   *
   * @default 1px
   */
  size?: number | string;
}

/**
 * Edges3D is the base class for symbol classes that add edge rendering visualization to existing symbols.
 * Edge rendering visualization is specific for 3D visualizations and can only be applied to [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/FillSymbol3DLayer/)
 * on [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/MeshSymbol3D/) or [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/ExtrudeSymbol3DLayer/) on [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PolygonSymbol3D/).
 *
 * Currently only edges of type `solid` and `sketch` are supported. See [SolidEdges3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/edges/SolidEdges3D/) and [SketchEdges3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/edges/SketchEdges3D/).
 *
 * [![symbol3D-edges](https://developers.arcgis.com/javascript/latest/assets/references/core/symbols/symbol3d-edges.png)](https://developers.arcgis.com/javascript/latest/sample-code/layers-scenelayer-edges/)
 *
 * @since 4.7
 */
export default class Edges3D extends JSONSupport {
  constructor(properties?: Edges3DProperties);
  /**
   * The color of the edges.
   * This can be autocast with an array of rgb(a) values, named string, hex string or an hsl(a) string,
   * an object with `r`, `g`, `b`, and `a` properties, or a [Color](https://developers.arcgis.com/javascript/latest/references/core/Color/) object.
   *
   * @default "black"
   */
  get color(): Color | null | undefined;
  set color(value: ColorLike | null | undefined);
  /**
   * A size in points by which to extend edges beyond their original end points.
   *
   * @default 0
   */
  get extensionLength(): number;
  set extensionLength(value: number | string);
  /**
   * The size of the edges in points. This value may be autocast with a string expressing size in points or pixels (e.g. `12px`).
   *
   * @default 1px
   */
  get size(): number;
  set size(value: number | string);
  /**
   * Creates a deep clone of the edges.
   *
   * @returns A deep clone of the object that
   *   invoked this method.
   */
  clone(): Edges3D;
}