import type CircuitPath from "../../../networks/support/CircuitPath.js";
import type CircuitTraceResult from "../circuits/support/CircuitTraceResult.js";
import type AggregatedGeometry from "./AggregatedGeometry.js";
import type FunctionResult from "./FunctionResult.js";
import type NetworkElement from "./NetworkElement.js";
import type { JSONSupport } from "../../../core/JSONSupport.js";

export interface TraceResultProperties {}

/**
 * This class defines the collection of results returned from the trace function. The trace can return [network elements](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/NetworkElement/), [aggregated geometries](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/AggregatedGeometry/),
 * and [functions](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/FunctionResult/).
 *
 * @since 4.20
 * @see [trace](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/trace/)
 */
export default class TraceResult extends JSONSupport {
  constructor(properties?: TraceResultProperties);
  /**
   * This property defines an aggregation of geometries returned by the trace. The aggregated geometries will only include geometries that belong to features with `assetgroups/assettypes` specified in the trace output.
   * This is returned only if the aggregated geometries results type is defined in the trace configuration.
   */
  get aggregatedGeometry(): AggregatedGeometry | null | undefined;
  /**
   * An array of circuits returned by the trace. Used in the telecom domain network.
   * This is returned only if the "circuits" result type is defined in the trace configuration.
   *
   * @beta
   * @since 4.34
   */
  get circuits(): CircuitTraceResult[] | null | undefined;
  /**
   * An array of network elements returned by the trace. The network element is a representation of how the network topology defines its graph.
   * This is returned only if the elements results type is defined in the trace configuration.
   * > [!WARNING]
   * >
   * > The elements property returning a [TelecomNetworkElement](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/TelecomNetworkElement/) is in beta and is reserved for
   * > future use in a telecom domain network.
   *
   * @see [NetworkElement](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/NetworkElement/)
   * @see [TelecomNetworkElement](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/TelecomNetworkElement/)
   */
  get elements(): NetworkElement[];
  /** Returns an array of function aggregation results. */
  get globalFunctionResults(): FunctionResult[];
  /**
   * This parameter is specific to the K-Nearest Neighbors Algorithm, when the nearest filter is provided in the trace configuration. It returns `true` if any neighbors were found.
   *
   * @default false
   */
  get kFeaturesForKNNFound(): boolean;
  /**
   * The paths returned by a path trace.
   *
   * @beta
   * @since 4.34
   */
  get paths(): CircuitPath[] | null | undefined;
  /**
   * Returns `true` if the starting points in the network trace operation are ignored.
   *
   * @default false
   */
  get startingPointsIgnored(): boolean;
  /** Returns any warnings encountered by the trace operation. */
  get warnings(): string[] | null | undefined;
}