import type { JSONSupport } from "../../core/JSONSupport.js";
import type { PointSymbolUnion } from "../../symbols/types.js";
import type { CIMSymbolProperties } from "../../symbols/CIMSymbol.js";
import type { PointSymbol3DProperties } from "../../symbols/PointSymbol3D.js";
import type { SimpleMarkerSymbolProperties } from "../../symbols/SimpleMarkerSymbol.js";
import type { PictureMarkerSymbolProperties } from "../../symbols/PictureMarkerSymbol.js";

export interface RouteStopSymbolsProperties {
  /**
   * The default symbol for _break_ [RouteLayer.stops](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [255, 255, 255], size: 12, outline: { color: [0, 122, 194], width: 3 } }
   */
  break?: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null;
  /**
   * The default symbol for the first [stop](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [0, 255, 0], size: 20, outline: { color: [255, 255, 255], width: 4 } }
   */
  first?: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null;
  /**
   * The default symbol for a _last_ [stop](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [255, 0, 0], size: 20, outline: { color: [255, 255, 255], width: 4 } }
   */
  last?: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null;
  /**
   * The default symbol for _middle_ [RouteLayer.stops](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [51, 51, 51],, size: 12, outline: { color: [0, 122, 194], width: 3 } }
   */
  middle?: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null;
  /**
   * The default symbol for an _unlocated_ [RouteLayer.stops](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [255, 0, 0], size: 12, outline: { color: [255, 255, 255], width: 3 } }
   */
  unlocated?: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null;
  /**
   * The default symbol for _waypoint_ [RouteLayer.stops](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [255, 255, 255], size: 12, outline: { color: [0, 122, 194], width: 3 } }
   */
  waypoint?: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null;
}

/**
 * RouteStopSymbols contains a set of symbols that will be used by [RouteLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/) to symbolize
 * new stops.
 *
 * @since 4.24
 * @see [RouteLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/)
 * @see [RouteSymbols](https://developers.arcgis.com/javascript/latest/references/core/layers/support/RouteSymbols/)
 */
export default class RouteStopSymbols extends JSONSupport {
  constructor(properties?: RouteStopSymbolsProperties);
  /**
   * The default symbol for _break_ [RouteLayer.stops](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [255, 255, 255], size: 12, outline: { color: [0, 122, 194], width: 3 } }
   */
  get break(): PointSymbolUnion | null | undefined;
  set break(value: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null | undefined);
  /**
   * The default symbol for the first [stop](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [0, 255, 0], size: 20, outline: { color: [255, 255, 255], width: 4 } }
   */
  get first(): PointSymbolUnion | null | undefined;
  set first(value: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null | undefined);
  /**
   * The default symbol for a _last_ [stop](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [255, 0, 0], size: 20, outline: { color: [255, 255, 255], width: 4 } }
   */
  get last(): PointSymbolUnion | null | undefined;
  set last(value: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null | undefined);
  /**
   * The default symbol for _middle_ [RouteLayer.stops](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [51, 51, 51],, size: 12, outline: { color: [0, 122, 194], width: 3 } }
   */
  get middle(): PointSymbolUnion | null | undefined;
  set middle(value: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null | undefined);
  /**
   * The default symbol for an _unlocated_ [RouteLayer.stops](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [255, 0, 0], size: 12, outline: { color: [255, 255, 255], width: 3 } }
   */
  get unlocated(): PointSymbolUnion | null | undefined;
  set unlocated(value: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null | undefined);
  /**
   * The default symbol for _waypoint_ [RouteLayer.stops](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/#stops).
   *
   * @default { type: "simple-marker", color: [255, 255, 255], size: 12, outline: { color: [0, 122, 194], width: 3 } }
   */
  get waypoint(): PointSymbolUnion | null | undefined;
  set waypoint(value: ((PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | (PointSymbol3DProperties & { type: "point-3d" }) | (CIMSymbolProperties & { type: "cim" })) | null | undefined);
}