import type Color from "../../Color.js";
import type LineStylePattern3D from "../patterns/LineStylePattern3D.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { LineCap } from "../types.js";
import type { LineStylePattern3DProperties } from "../patterns/LineStylePattern3D.js";
import type { ColorLike } from "../../Color.js";

/** @since 5.0 */
export interface Symbol3DOutlineProperties extends Partial<Pick<Symbol3DOutline, "patternCap">> {
  /**
   * The color of the outline.
   * 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.
   *
   * @since 5.0
   */
  color?: ColorLike | null;
  /**
   * The stroke pattern used to render the outline. By default, the lines are shown as solid.
   *
   * @since 5.0
   */
  pattern?: (LineStylePattern3DProperties & { type: "style" }) | null;
  /**
   * The width of the outline in points. This value may be autocast with a string
   * expressing size in points or pixels (e.g. `12px`).
   *
   * @since 5.0
   */
  size?: number | string;
}

/** @since 5.0 */
export default class Symbol3DOutline extends JSONSupport {
  constructor(properties?: Symbol3DOutlineProperties);
  /**
   * The color of the outline.
   * 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.
   *
   * @since 5.0
   */
  get color(): Color | null | undefined;
  set color(value: ColorLike | null | undefined);
  /**
   * The stroke pattern used to render the outline. By default, the lines are shown as solid.
   *
   * @since 5.0
   */
  get pattern(): LineStylePattern3D | null | undefined;
  set pattern(value: (LineStylePattern3DProperties & { type: "style" }) | null | undefined);
  /**
   * The style applied to the tips of each pattern segment along the line.
   *
   * @default "butt"
   * @since 5.0
   */
  accessor patternCap: LineCap;
  /**
   * The width of the outline in points. This value may be autocast with a string
   * expressing size in points or pixels (e.g. `12px`).
   *
   * @since 5.0
   */
  get size(): number;
  set size(value: number | string);
}