import type TraceConfiguration from "./TraceConfiguration.js";
import type { ClonableMixin } from "../../core/Clonable.js";
import type { AssetJSON, BarrierJSON, FunctionBarrierJSON, NearestNeighborJSON, PropagatorJSON } from "./jsonTypes.js";
import type { TraceConfigurationProperties } from "./TraceConfiguration.js";

export interface UNTraceConfigurationProperties extends TraceConfigurationProperties, Partial<Pick<UNTraceConfiguration, "allowIndeterminateFlow" | "arcadeExpressionBarrier" | "circuitName" | "diagramTemplateName" | "domainNetworkName" | "filterBarriers" | "filterBitsetNetworkAttributeName" | "filterFunctionBarriers" | "filterScope" | "includeContainers" | "includeContent" | "includeIsolated" | "includeStructures" | "includeUpToFirstSpatialContainer" | "inferConnectivity" | "maxHops" | "nearestNeighbor" | "numPaths" | "outputFilterCategories" | "outputFilters" | "propagators" | "subnetworkName" | "targetTierName" | "tierName" | "validateLocatability">> {}

/**
 * The UNTraceConfiguration class contains properties required to define objects than can be used to run custom traces on utility networks.
 * A UNTraceConfiguration differs from a [TraceConfiguration](https://developers.arcgis.com/javascript/latest/references/core/networks/support/TraceConfiguration/) slightly because a UNTraceConfiguration contains parameters that
 * are only applicable or relevant to utility networks.
 *
 * @since 4.23
 * @see [UtilityNetwork](https://developers.arcgis.com/javascript/latest/references/core/networks/UtilityNetwork/)
 * @see [NamedTraceConfiguration](https://developers.arcgis.com/javascript/latest/references/core/networks/support/NamedTraceConfiguration/)
 * @see [TraceConfiguration](https://developers.arcgis.com/javascript/latest/references/core/networks/support/TraceConfiguration/)
 * @see [TraceParameters](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/TraceParameters/)
 * @see [Trace utility networks](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/about-tracing-utility-networks.htm)
 * @see [Configure a trace](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/configure-a-trace.htm)
 * @see [Add Trace Configuration (Utility Network)](https://pro.arcgis.com/en/pro-app/latest/tool-reference/utility-networks/add-trace-configuration.htm)
 * @see [Trace - ArcGIS REST API](https://developers.arcgis.com/rest/services-reference/enterprise/trace-utility-network-server-.htm)
 * @example
 * // create a new instance of UNTraceConfiguration
 * // and configure some parameters
 * const unTraceConfiguration = new UNTraceConfiguration({
 *   domainNetworkName: "Electric",
 *   tierName: "Electric Distribution",
 *   subnetworkName: "RMT003",
 *   includeContainers: true,
 *   validateConsistency: true,
 *   // Traversability
 *   conditionBarriers: [
 *     {
 *       name: "E:Device Status",
 *       type: "networkAttribute",
 *       operator: "equal",
 *       value: 1,
 *       combineUsingOr: false,
 *       isSpecificValue: true
 *     }
 *   ],
 *   traversabilityScope: "junctionsAndEdges",
 * });
 */
export default class UNTraceConfiguration extends UNTraceConfigurationSuperclass {
  constructor(properties?: UNTraceConfigurationProperties);
  /** Specifies whether to allow IndeterminateFlow. */
  accessor allowIndeterminateFlow: boolean | null | undefined;
  /** Allows users to input arcade expressions. */
  accessor arcadeExpressionBarrier: string | null | undefined;
  /**
   * Specifies the name of the circuit that will be traced.
   * When a value is provided for this option, the starting location for the circuit is used as the starting point for the trace, and `traceLocations` is not required.
   *
   * This option is only honored for circuit traces.
   *
   * @beta
   * @since 4.34
   */
  accessor circuitName: string | null | undefined;
  /** Specifies the diagram Template Name. */
  accessor diagramTemplateName: string | null | undefined;
  /**
   * Specifies the name of the domain network where the trace will be run.
   *
   * @see [Domain networks - ArcGIS Pro](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/domain-network.htm)
   */
  accessor domainNetworkName: string | null | undefined;
  /** An array of objects representing specific categories or network attributes where the trace will stop. */
  accessor filterBarriers: BarrierJSON[];
  /** Ensures the trace results include any bit that is set in the starting points for the network attribute. */
  accessor filterBitsetNetworkAttributeName: string | null | undefined;
  /** An array of objects representing filter function barriers. */
  accessor filterFunctionBarriers: FunctionBarrierJSON[];
  /**
   * Specifies where the filter will be applied.
   *
   * Value | Description
   * ------|------------
   * junctions | Filter will be applied to junctions only.
   * edges | Filter will be applied to edges only.
   * junctionsAndEdges | Filter will be applied to both junctions and edges.
   */
  accessor filterScope: "junctions" | "edges" | "junctionsAndEdges" | null | undefined;
  /** Specifies if the container features will be included in the trace results. */
  accessor includeContainers: boolean | null | undefined;
  /** Specifies if the content in containers will be included in the results. */
  accessor includeContent: boolean | null | undefined;
  /** Specifies whether to include isolated features for an isolation trace. */
  accessor includeIsolated: boolean | null | undefined;
  /** Specifies if structure features and objects will be included in the trace results. */
  accessor includeStructures: boolean | null | undefined;
  /** Specifies whether to limit the containers returned to include only those encountered up to, and including, the first spatial container for each network element in the trace results. */
  accessor includeUpToFirstSpatialContainer: boolean | null | undefined;
  /**
   * Specifies whether the path trace will use connectivity inference
   * to traverse containment associations to find a path between the
   * specified starting and stopping location.
   *
   * This option is only honored for path traces.
   *
   * @beta
   * @since 4.34
   */
  accessor inferConnectivity: boolean | null | undefined;
  /**
   * Specifies the maximum number of hops between edges allowed in the valid path, excluding the starting point.
   * All edges and junction-junction connectivity associations are evaluated as having a fixed unit length of 1 on traversal.
   * Terminal devices are evaluated as having a fixed unit length of 2.
   *
   * This option is only honored for path or circuit traces.
   *
   * @beta
   * @since 4.34
   */
  accessor maxHops: number | null | undefined;
  /** Specifies the parameters needed for calculating nearest neighbors. Nearest neighbor is used to return a number of features of a certain type within a given distance. */
  accessor nearestNeighbor: NearestNeighborJSON | null | undefined;
  /**
   * Specifies the maximum number of paths that will be returned between
   * a given set of starting points and stopping points for a valid path.
   *
   * This option is only honored for path traces.
   *
   * @beta
   * @since 4.34
   */
  accessor numPaths: number | null | undefined;
  /** An array of objects representing the output filter categories. */
  accessor outputFilterCategories: Object[];
  /** An array of objects used to control what is returned in the results of a trace. */
  accessor outputFilters: AssetJSON[];
  /**
   * A propagator defines the propagation of a network attribute along a traversal and provides a filter to stop traversal. Propagators are only applicable to subnetwork-based traces (subnetwork, subnetworksource, upstream, or downstream).
   *
   * @see [Attribute propagation - ArcGIS Pro](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/attribute-propagation.htm)
   */
  accessor propagators: PropagatorJSON[];
  /** Specifies the name of the [subnetwork](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/subnetworks.htm) where the trace will be run. */
  accessor subnetworkName: string | null | undefined;
  /**
   * Specifies the name of the tier where an upstream or downstream trace ends.
   *
   * @see [Tiers - ArcGIS Pro](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/tiers.htm)
   */
  accessor targetTierName: string | null | undefined;
  /**
   * Specifies the name of the tier where the trace will be run.
   *
   * @see [Tiers - ArcGIS Pro](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/tiers.htm)
   * @see [Trace - ArcGIS REST API](https://developers.arcgis.com/rest/services-reference/enterprise/trace-utility-network-server-.htm)
   */
  accessor tierName: string | null | undefined;
  /** Specifies if its necessary to validate whether traversed junction or edge objects have the necessary containment, attachment, or connectivity association in their association hierarchy. */
  accessor validateLocatability: boolean | null | undefined;
}
declare const UNTraceConfigurationSuperclass: typeof TraceConfiguration & typeof ClonableMixin