import type DirectionsFeatureSet from "./DirectionsFeatureSet.js";
import type FeatureSet from "./FeatureSet.js";
import type NAMessage from "./NAMessage.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { FeatureSetProperties } from "./FeatureSet.js";
import type { DirectionsFeatureSetProperties } from "./DirectionsFeatureSet.js";
import type { NAMessageProperties } from "./NAMessage.js";

export interface ClosestFacilitySolveResultProperties {
  /**
   * Direction lines contains a set of line features for each segment of the route. This feature set can be used to
   * visualize the turn-by-turn directions on a map. Direction lines are returned if
   * [ClosestFacilityParameters.returnDirections](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnDirections) is set to `true` and
   * [ClosestFacilityParameters.directionsOutputType](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#directionsOutputType) is set
   * to `featureset` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @since 4.25
   */
  directionLines?: FeatureSetProperties | null;
  /**
   * Direction points contains a set of point features representing the direction maneuvers such as arriving to or
   * departing from a stop, turning left or right, and other events along your route. This feature set contains the
   * route's turn-by-turn directions. Direction lines are returned if
   * [ClosestFacilityParameters.returnDirections](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnDirections) is set to `true` and
   * [ClosestFacilityParameters.directionsOutputType](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#directionsOutputType) is set
   * to `featureset` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @since 4.25
   */
  directionPoints?: FeatureSetProperties | null;
  /**
   * Directions are returned if
   * [ClosestFacilityParameters.returnDirections](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnDirections) is set to `true` and
   * [ClosestFacilityParameters.directionsOutputType](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#directionsOutputType) is set
   * to `complete`, `complete-no-events`, `instructions-only', `standard` or `summary-only` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   */
  directions?: DirectionsFeatureSetProperties[] | null;
  /**
   * This provides access to the output facilities from a closest facility analysis.
   * Facilities are returned if [ClosestFacilityParameters.returnFacilities](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnFacilities) is set to `true`
   * in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [facilities](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#facilities-1)
   */
  facilities?: FeatureSetProperties | null;
  /**
   * This provides access to the locations used as starting or ending points in a closest facility analysis.
   * Facilities are returned if [ClosestFacilityParameters.returnIncidents](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnIncidents) is set to `true`
   * in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [incidents](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#incidents-1)
   */
  incidents?: FeatureSetProperties | null;
  /** An array of processing [messages](https://developers.arcgis.com/javascript/latest/references/core/rest/support/NAMessage/) generated by the server. */
  messages?: NAMessageProperties[] | null;
  /**
   * A set of features representing point barriers.
   * Point barriers are returned if [ClosestFacilityParameters.returnPointBarriers](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnPointBarriers)
   * is set to `true` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [barriers](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#barriers-1)
   */
  pointBarriers?: FeatureSetProperties | null;
  /**
   * A set of features representing polygon barriers.
   * Point barriers are returned if [ClosestFacilityParameters.returnPolygonBarriers](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnPolygonBarriers)
   * is set to `true` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [polygonBarriers](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#polygonbarriers-1)
   */
  polygonBarriers?: FeatureSetProperties | null;
  /**
   * A set of features representing polyline barriers.
   * Point barriers are returned if [ClosestFacilityParameters.returnPolylineBarriers](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnPolylineBarriers)
   * is set to `true` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [polylineBarriers](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#polylinebarriers-1)
   */
  polylineBarriers?: FeatureSetProperties | null;
  /**
   * A set of features representing routes between the facilities and the incidents.
   * Routes are returned if [ClosestFacilityParameters.returnRoutes](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnRoutes)
   * is set to `true` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [routes](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#routes)
   */
  routes?: FeatureSetProperties | null;
  /**
   * This provides access to the edges that are traversed while solving a network analysis layer.
   * Traversed edges are returned if [ClosestFacilityParameters.returnTraversedEdges](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnTraversedEdges) is set to `true`
   * in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @since 4.25
   * @see [traversedEdges](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#traversededges)
   */
  traversedEdges?: FeatureSetProperties | null;
  /**
   * This provides access to the junctions that are traversed while solving a network analysis layer.
   * Traversed junctions are returned if [ClosestFacilityParameters.returnTraversedJunctions](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnTraversedJunctions) is set to `true`
   * in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @since 4.25
   * @see [traversedJunctions](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#traversedjunctions)
   */
  traversedJunctions?: FeatureSetProperties | null;
  /**
   * This provides access to the turns that are traversed while solving a network analysis layer.
   * Traversed turns are returned if [ClosestFacilityParameters.returnTraversedTurns](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnTraversedTurns) is set to `true`
   * in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @since 4.25
   * @see [traversedTurns](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#traversedturns)
   */
  traversedTurns?: FeatureSetProperties | null;
}

/**
 * The result from [closestFacility](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/).
 *
 * @since 4.20
 * @see [closestFacility](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/)
 * @see [ClosestFacilityParameters](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/)
 */
export default class ClosestFacilitySolveResult extends JSONSupport {
  constructor(properties?: ClosestFacilitySolveResultProperties);
  /**
   * Direction lines contains a set of line features for each segment of the route. This feature set can be used to
   * visualize the turn-by-turn directions on a map. Direction lines are returned if
   * [ClosestFacilityParameters.returnDirections](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnDirections) is set to `true` and
   * [ClosestFacilityParameters.directionsOutputType](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#directionsOutputType) is set
   * to `featureset` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @since 4.25
   */
  get directionLines(): FeatureSet | null | undefined;
  set directionLines(value: FeatureSetProperties | null | undefined);
  /**
   * Direction points contains a set of point features representing the direction maneuvers such as arriving to or
   * departing from a stop, turning left or right, and other events along your route. This feature set contains the
   * route's turn-by-turn directions. Direction lines are returned if
   * [ClosestFacilityParameters.returnDirections](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnDirections) is set to `true` and
   * [ClosestFacilityParameters.directionsOutputType](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#directionsOutputType) is set
   * to `featureset` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @since 4.25
   */
  get directionPoints(): FeatureSet | null | undefined;
  set directionPoints(value: FeatureSetProperties | null | undefined);
  /**
   * Directions are returned if
   * [ClosestFacilityParameters.returnDirections](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnDirections) is set to `true` and
   * [ClosestFacilityParameters.directionsOutputType](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#directionsOutputType) is set
   * to `complete`, `complete-no-events`, `instructions-only', `standard` or `summary-only` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   */
  get directions(): DirectionsFeatureSet[] | null | undefined;
  set directions(value: DirectionsFeatureSetProperties[] | null | undefined);
  /**
   * This provides access to the output facilities from a closest facility analysis.
   * Facilities are returned if [ClosestFacilityParameters.returnFacilities](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnFacilities) is set to `true`
   * in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [facilities](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#facilities-1)
   */
  get facilities(): FeatureSet | null | undefined;
  set facilities(value: FeatureSetProperties | null | undefined);
  /**
   * This provides access to the locations used as starting or ending points in a closest facility analysis.
   * Facilities are returned if [ClosestFacilityParameters.returnIncidents](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnIncidents) is set to `true`
   * in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [incidents](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#incidents-1)
   */
  get incidents(): FeatureSet | null | undefined;
  set incidents(value: FeatureSetProperties | null | undefined);
  /** An array of processing [messages](https://developers.arcgis.com/javascript/latest/references/core/rest/support/NAMessage/) generated by the server. */
  get messages(): NAMessage[] | null | undefined;
  set messages(value: NAMessageProperties[] | null | undefined);
  /**
   * A set of features representing point barriers.
   * Point barriers are returned if [ClosestFacilityParameters.returnPointBarriers](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnPointBarriers)
   * is set to `true` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [barriers](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#barriers-1)
   */
  get pointBarriers(): FeatureSet | null | undefined;
  set pointBarriers(value: FeatureSetProperties | null | undefined);
  /**
   * A set of features representing polygon barriers.
   * Point barriers are returned if [ClosestFacilityParameters.returnPolygonBarriers](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnPolygonBarriers)
   * is set to `true` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [polygonBarriers](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#polygonbarriers-1)
   */
  get polygonBarriers(): FeatureSet | null | undefined;
  set polygonBarriers(value: FeatureSetProperties | null | undefined);
  /**
   * A set of features representing polyline barriers.
   * Point barriers are returned if [ClosestFacilityParameters.returnPolylineBarriers](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnPolylineBarriers)
   * is set to `true` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [polylineBarriers](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#polylinebarriers-1)
   */
  get polylineBarriers(): FeatureSet | null | undefined;
  set polylineBarriers(value: FeatureSetProperties | null | undefined);
  /**
   * A set of features representing routes between the facilities and the incidents.
   * Routes are returned if [ClosestFacilityParameters.returnRoutes](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnRoutes)
   * is set to `true` in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @see [routes](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#routes)
   */
  get routes(): FeatureSet | null | undefined;
  set routes(value: FeatureSetProperties | null | undefined);
  /**
   * This provides access to the edges that are traversed while solving a network analysis layer.
   * Traversed edges are returned if [ClosestFacilityParameters.returnTraversedEdges](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnTraversedEdges) is set to `true`
   * in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @since 4.25
   * @see [traversedEdges](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#traversededges)
   */
  get traversedEdges(): FeatureSet | null | undefined;
  set traversedEdges(value: FeatureSetProperties | null | undefined);
  /**
   * This provides access to the junctions that are traversed while solving a network analysis layer.
   * Traversed junctions are returned if [ClosestFacilityParameters.returnTraversedJunctions](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnTraversedJunctions) is set to `true`
   * in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @since 4.25
   * @see [traversedJunctions](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#traversedjunctions)
   */
  get traversedJunctions(): FeatureSet | null | undefined;
  set traversedJunctions(value: FeatureSetProperties | null | undefined);
  /**
   * This provides access to the turns that are traversed while solving a network analysis layer.
   * Traversed turns are returned if [ClosestFacilityParameters.returnTraversedTurns](https://developers.arcgis.com/javascript/latest/references/core/rest/support/ClosestFacilityParameters/#returnTraversedTurns) is set to `true`
   * in a [solve()](https://developers.arcgis.com/javascript/latest/references/core/rest/closestFacility/#solve) request.
   *
   * @since 4.25
   * @see [traversedTurns](https://developers.arcgis.com/rest/services-reference/enterprise/closest-facility-sync-services/#traversedturns)
   */
  get traversedTurns(): FeatureSet | null | undefined;
  set traversedTurns(value: FeatureSetProperties | null | undefined);
}