import type Polyline from "../../../../geometry/Polyline.js";
import type Circuit from "../../../../networks/support/Circuit.js";
import type CircuitPath from "../../../../networks/support/CircuitPath.js";
import type { JSONSupport } from "../../../../core/JSONSupport.js";
import type { PolylineProperties } from "../../../../geometry/Polyline.js";
import type { CircuitPathProperties } from "../../../../networks/support/CircuitPath.js";

export interface CircuitTraceResultProperties extends Partial<Pick<CircuitTraceResult, "circuit">> {
  /** The geometry of the traced circuit, if geometry was requested in the trace parameters. */
  geometry?: PolylineProperties | null;
  /**
   * The path associated with the traced circuit.
   * This property is present for non-sectioned circuits.
   */
  path?: CircuitPathProperties | null;
}

/**
 * Represents the result of a circuit trace with the "circuits" result type.
 * Used in the telecom domain network.
 *
 * @beta
 * @since 4.34
 */
export default class CircuitTraceResult extends JSONSupport {
  constructor(properties?: CircuitTraceResultProperties);
  /** The circuit information for the trace result. */
  accessor circuit: Circuit;
  /** The geometry of the traced circuit, if geometry was requested in the trace parameters. */
  get geometry(): Polyline | null | undefined;
  set geometry(value: PolylineProperties | null | undefined);
  /**
   * The path associated with the traced circuit.
   * This property is present for non-sectioned circuits.
   */
  get path(): CircuitPath | null | undefined;
  set path(value: CircuitPathProperties | null | undefined);
}