import type Collection from "../../core/Collection.js";
import type SpatialReference from "../../geometry/SpatialReference.js";
import type PointBarrier from "./PointBarrier.js";
import type PolygonBarrier from "./PolygonBarrier.js";
import type PolylineBarrier from "./PolylineBarrier.js";
import type TravelMode from "./TravelMode.js";
import type { ClonableMixin, ClonableMixinProperties } from "../../core/Clonable.js";
import type { JSONSupport, JSONSupportMixinProperties } from "../../core/JSONSupport.js";
import type { AttributeParameterValue, LengthUnit, NetworkDate, NetworkInput, OutputLine, OutputPolygon, TravelDirection, UTurnRestriction } from "./types.js";
import type { SpatialReferenceProperties } from "../../geometry/SpatialReference.js";
import type { TravelModeProperties } from "./TravelMode.js";

export interface ServiceAreaParametersProperties extends JSONSupportMixinProperties, ClonableMixinProperties, Partial<Pick<ServiceAreaParameters, "accumulateAttributes" | "apiKey" | "attributeParameterValues" | "defaultBreaks" | "excludeSourcesFromPolygons" | "facilities" | "geometryPrecision" | "geometryPrecisionM" | "geometryPrecisionZ" | "ignoreInvalidLocations" | "impedanceAttribute" | "mergeSimilarPolygonRanges" | "outputGeometryPrecision" | "outputGeometryPrecisionUnits" | "outputLines" | "outputPolygons" | "overlapLines" | "overlapPolygons" | "overrides" | "pointBarriers" | "polygonBarriers" | "polylineBarriers" | "preserveObjectID" | "restrictionAttributes" | "restrictUTurns" | "returnFacilities" | "returnPointBarriers" | "returnPolygonBarriers" | "returnPolylineBarriers" | "splitLinesAtBreaks" | "splitPolygonsAtBreaks" | "timeOfDay" | "timeOfDayIsUTC" | "travelDirection" | "trimOuterPolygon" | "trimPolygonDistance" | "trimPolygonDistanceUnits" | "useHierarchy">> {
  /**
   * Use this property to specify the spatial reference of the geometries, such as line or point features, returned by
   * a solve operation.
   *
   * @see [outSR](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#outsr)
   */
  outSpatialReference?: SpatialReferenceProperties | null;
  /**
   * A travel mode represents a means of transportation, such as driving or walking. Travel modes define the physical
   * characteristics of a vehicle or pedestrian.
   *
   * Use [fetchServiceDescription()](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-networkService.html#fetchServiceDescription) to
   * obtain a list of predefined travel modes and the default travel mode that is used if one is not specified in a
   * routing reqest.
   *
   * @see [Introduction to travel modes](https://enterprise.arcgis.com/en/portal/latest/administer/windows/travel-modes.htm)
   * @see [Default travel modes](https://enterprise.arcgis.com/en/portal/latest/administer/windows/travel-modes.htm#GUID-96DF7F50-E0B2-4BF3-8271-EB515D3F0107)
   * @see [travelMode](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#travelmode)
   */
  travelMode?: TravelModeProperties | null;
}

/**
 * ServiceAreaParameters provides the input parameters for a [serviceArea](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-serviceArea.html) request.
 *
 * @since 4.20
 * @see [serviceArea](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-serviceArea.html)
 * @see [ServiceAreaSolveResult](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaSolveResult.html)
 * @see [Tutorial: Find service areas](https://developers.arcgis.com/javascript/latest/find-service-areas/)
 * @see [Service area service with synchronous execution](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync.htm)
 */
export default class ServiceAreaParameters extends ServiceAreaParametersSuperclass {
  constructor(properties?: ServiceAreaParametersProperties);
  /**
   * Use this property to specify whether the operation should accumulate values other than the value specified for
   * [impedanceAttribute](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#impedanceAttribute). For example, if your impedanceAttribute is set to `travel-time`, the total
   * travel time for the route will be calculated by the operation. However, if you also want to calculate the total
   * distance of the route in miles, you can specify `Miles` as the value for the accumulateAttributes property.
   *
   * Known Value |
   * ------------|
   * kilometers |
   * miles |
   * meters |
   * minutes |
   * time-at-1kph
   * travel-time |
   * truck-minutes |
   * truck-travel-time |
   * walk-time |
   *
   * @see [Network attributes](https://pro.arcgis.com/en/pro-app/latest/help/analysis/networks/what-are-network-attributes-.htm).
   * @see [accumulateAttributeNames](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#accumulateattributenames)
   */
  accessor accumulateAttributes: string[] | null | undefined;
  /**
   * An authorization string used to access a resource or service.
   * [API keys](https://developers.arcgis.com/documentation/security-and-authentication/api-key-authentication/) are generated and managed in the
   * portal. An API key is tied explicitly to an ArcGIS account; it is also used to
   * monitor service usage.
   * Setting a fine-grained API key on a specific class overrides the [global API key](https://developers.arcgis.com/javascript/latest/api-reference/esri-config.html#ConfigWithApiKey).
   *
   * @since 4.21
   * @see [API keys](https://developers.arcgis.com/documentation/security-and-authentication/api-key-authentication/)
   * @see [Display a map tutorial - get an API key](https://developers.arcgis.com/javascript/latest/display-a-map/#get-an-access-token)
   * @see [token](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#token)
   * @example
   * // Compute the service area for a 2km walking distance.
   * const url = "https://route-api.arcgis.com/arcgis/rest/services/World/ServiceAreas/NAServer/ServiceArea_World";
   * const apiKey = "abcdefghijklmnopqrstuvwxyz";
   * const spatialReference = SpatialReference.WebMercator;
   *
   * const start = new Graphic({
   *   geometry: {
   *     type: "point",
   *     x: -13039204.060165292,
   *     y: 4031816.239573444,
   *     spatialReference
   *   },
   *   symbol: {
   *     type: "simple-marker",
   *     color: "white",
   *     size: 8
   *   }
   * });
   *
   * const networkDescription = await fetchServiceDescription(url, apiKey);
   * const travelMode = networkDescription.supportedTravelModes.find(
   *   (travelMode) => travelMode.name === "Walking Distance"
   * );
   *
   * const serviceAreaParameters = new ServiceAreaParameters({
   *   apiKey,
   *   facilities: new FeatureSet({
   *     features: [start]
   *   }),
   *   defaultBreaks: [2.5],
   *   travelMode,
   *   travelDirection: "to-facility",
   *   outSpatialReference: spatialReference,
   *   trimOuterPolygon: true
   * });
   *
   * const results = await solve(url, serviceAreaParameters);
   */
  accessor apiKey: string | null | undefined;
  /**
   * Use this property to specify additional values required by an attribute or restriction, such as to specify
   * whether the restriction prohibits, avoids, or prefers travel on restricted roads. If the restriction is meant to
   * avoid or prefer roads, you can further specify the degree to which they are avoided or preferred using this
   * property. For example, you can choose to never use toll roads, avoid them as much as possible, or prefer them.
   *
   * @see [attributeParameterValues](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#attributeparametervalues)
   */
  accessor attributeParameterValues: AttributeParameterValue[] | null | undefined;
  /**
   * Use this parameter to specify the size and number of service areas to generate for each facility. The service
   * generates travel time- or travel distance-based service areas depending on the units for this parameter. If units
   * are time based, the service areas are generated based on travel time along underlying streets. If units are
   * distance based, the service areas are generated based on travel distances.
   *
   * The unit for this parameter is based on the unit of the impedance attribute specified using impedanceAttributeName
   * parameter or the impedanceAttributeName of the travel mode if travel mode is specified. If the
   * impedanceAttributeName parameter is `travel-time`, the values specified as the defaultBreaks parameter are
   * interpreted to be in minutes, and the service generates time-based service areas. Otherwise, the values are
   * interpreted to be in miles or kilometers based on whether the impedanceAttributeName is set to `miles` or
   * `kilometers`, respectively, and the service generates distance-based service areas.
   *
   * @see [defaultBreaks](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#defaultbreaks)
   */
  accessor defaultBreaks: number[] | null | undefined;
  /**
   * An array of network source names to not use when generating polygons.
   *
   * This property specifies if certain network sources should be excluded from the service area polygon generation. A
   * service area on a multi-modal network where only one mode is being used to compute the service area would get a
   * more appropriate shape if other modes are excluded from the polygons.
   */
  accessor excludeSourcesFromPolygons: string[] | null | undefined;
  /**
   * The input locations around which service areas are generated.
   *
   * @see [facilities](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#facilities)
   */
  accessor facilities: NetworkInput | null | undefined;
  /**
   * Use this property to specify the number of decimal places in the response geometries returned by solve operation.
   * This applies to x- and y-values only (not m- or z-values).
   *
   * @since 4.25
   * @see [geometryPrecision](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#geometryprecision)
   */
  accessor geometryPrecision: number | null | undefined;
  /**
   * Use this property to specify the number of decimal places in the response geometries returned by solve operation.
   * This applies to m-value only (not x-,y- or z-values).
   *
   * @since 4.25
   * @see [geometryPrecisionM](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#geometryprecisionm)
   */
  accessor geometryPrecisionM: number | null | undefined;
  /**
   * Use this property to specify the number of decimal places in the response geometries returned by a solve operation.
   * This applies to z-value only (not x-,y- or m-values).
   *
   * @since 4.25
   * @see [geometryPrecisionZ](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#geometryprecisionz)
   */
  accessor geometryPrecisionZ: number | null | undefined;
  /**
   * Specify whether invalid input locations should be ignored when finding the best solution. An input point is deemed
   * invalid by the operation if it is not within the maximum snap tolerance of any traversable street. When `true`
   * invalid points are ignored. When `false` any invalid point in your request will cause the operation to return a failure.
   *
   * @since 4.25
   * @see [ignoreInvalidLocations](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#ignoreinvalidlocations)
   */
  accessor ignoreInvalidLocations: boolean | null | undefined;
  /**
   * Specifies the impedance.
   *
   * Impedance is a value that quantifies travel along the transportation network. Travel distance is an example of
   * impedance; it quantifies the length of walkways and road segments. Similarly, drive time—the typical time it takes
   * to drive a car along a road segment—is an example of impedance. This property will be ignored if
   * [travelMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#travelMode) is set.
   *
   * Known Value |
   * ------------|
   * kilometers |
   * miles |
   * meters |
   * minutes |
   * time-at-1kph
   * travel-time |
   * truck-minutes |
   * truck-travel-time |
   * walk-time |
   *
   * @see [Network attributes](https://pro.arcgis.com/en/pro-app/latest/help/analysis/networks/what-are-network-attributes-.htm)
   * @see [impedanceAttributeName](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#impedanceattributename)
   */
  impedanceAttribute?: string | null;
  /**
   * Use this parameter to specify whether the service areas from different facilities that have the same break value
   * should be joined together or split at break values.
   *
   * If `true`, service area polygons from multiple facilities with the same break value will be merged together,
   * resulting in a single polygon feature per break value.
   *
   * if `false`, service area polygons from multiple facilities with the same break values will remain separate polygon
   * features.
   *
   * @default false
   * @see [mergeSimilarPolygonRanges](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#mergesimilarpolygonranges)
   */
  accessor mergeSimilarPolygonRanges: boolean;
  /**
   * Use this property to specify by how much you want to simplify the route geometry returned by the operation.
   * Simplification maintains critical points on a route, such as turns at intersections, to define the essential shape
   * of the route and removes other points. The value of this property, regardless of whether you rely on the default
   * or explicitly set a value, is overridden when you pass in [travelMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#travelMode).
   *
   * The units are specified with the [outputGeometryPrecisionUnits](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#outputGeometryPrecisionUnits) parameter.
   *
   * @see [outputGeometryPrecision](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#outputgeometryprecision)
   */
  accessor outputGeometryPrecision: number | null | undefined;
  /**
   * Use this property to specify the units for the value specified for the
   * [outputGeometryPrecision](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#outputGeometryPrecision) parameter. The value of this parameter, regardless of whether
   * you rely on the default or explicitly set a value, is overridden when you pass in [travelMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#travelMode).
   *
   * @see [outputGeometryPrecisionUnits](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#outputgeometryprecisionunits)
   */
  outputGeometryPrecisionUnits?: LengthUnit | null;
  /**
   * Use this property to specify the type of route features that are output by the operation. This parameter is
   * applicable only if the {@link rest/support/ServiceAreaParameters#returnRoutes} parameter is set to `true`.
   *
   * Possible Value          | Description
   * ------------------------|------------------------
   * none                    | Do not return any shapes for the routes.
   * straight                | Return a straight line between the stops.
   * true-shape              | Return the exact shape of the resulting route that is based on the underlying streets.
   * true-shape-with-measure | Return the exact shape of the resulting route that is based on the underlying streets and include route measurements that keep track of the cumulative travel time or travel distance along the route relative to the first stop.
   *
   * @see [outputLines](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#outputlines)
   */
  outputLines?: OutputLine | null;
  /**
   * This parameter sets whether service area polygons should be returned and to what detail.
   *
   * Possible Value          | Description
   * ------------------------|------------------------
   * none                    | Do not generate service areas. This is useful in cases in which you don't want to generate areas around facilities, but instead, just want to generate service area lines.
   * detailed                | Create detailed service areas.
   * simplified              | Create generalized service areas.
   *
   * @see [outputPolygons](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#outputpolygons)
   */
  outputPolygons?: OutputPolygon | null;
  /**
   * Use this property to specify the spatial reference of the geometries, such as line or point features, returned by
   * a solve operation.
   *
   * @see [outSR](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#outsr)
   */
  get outSpatialReference(): SpatialReference | null | undefined;
  set outSpatialReference(value: SpatialReferenceProperties | null | undefined);
  /**
   * Specifies whether the service area lines from different facilities can overlap each other.
   *
   * If `true`, services area lines can overlap one another.
   * If `false`, service area lines from one facility cannot overlap those from another facility.
   *
   * @default false
   * @see [overlapLines](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#overlaplines)
   */
  accessor overlapLines: boolean | null | undefined;
  /**
   * Specifies whether the service areas from different facilities can overlap each other.
   *
   * If `true`, services areas can overlap one another.
   * If `false`, service areas from one facility cannot overlap those from another facility.
   *
   * @default false
   * @see [overlapPolygons](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#overlappolygons)
   */
  accessor overlapPolygons: boolean | null | undefined;
  /**
   * Specify additional settings that can influence the behavior of the solver when finding solutions for the network
   * analysis problems.
   *
   * @since 4.25
   * @see [overrides](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#overrides)
   */
  accessor overrides: Record<string, number | boolean | string> | null | undefined;
  /**
   * Use this property to specify one or more points that will act as temporary restrictions or represent additional
   * time or distance that may be required to travel on the underlying streets. For example, a point barrier can be
   * used to represent a fallen tree along a street or a time delay spent at a railroad crossing.
   *
   * @see [barriers](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#barriers)
   */
  accessor pointBarriers: (NetworkInput | Collection<PointBarrier>) | null | undefined;
  /**
   * Use this property to specify polygons that either completely restrict travel or proportionately scale the time or
   * distance required to travel on the streets intersected by the polygons.
   *
   * @see [polygonBarriers](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#polygonbarriers)
   */
  accessor polygonBarriers: (NetworkInput | Collection<PolygonBarrier>) | null | undefined;
  /**
   * Use this property to specify one or more lines that prohibit travel anywhere the lines intersect the streets. For
   * example, a parade or protest that blocks traffic across several street segments can be modeled with a line
   * barrier.
   *
   * @see [polylineBarriers](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#polylinebarriers)
   */
  accessor polylineBarriers: (NetworkInput | Collection<PolylineBarrier>) | null | undefined;
  /**
   * Use this property to specify if the Object IDs specified for input locations such as stops or barriers should be
   * preserved when the input locations are returned as output.
   *
   * @since 4.25
   * @see [preserveObjectID](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#preserveobjectid)
   */
  accessor preserveObjectID: boolean | null | undefined;
  /**
   * Use this property to specify which restrictions should be honored by the operation. A restriction represents a
   * driving preference or requirement. This value is ignored if [travelMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#travelMode) is specified.
   *
   * Known Value |
   * ------------|
   * any-hazmat-prohibited |
   * avoid-carpool-roads |
   * avoid-express-lanes |
   * avoid-ferries |
   * avoid-gates |
   * avoid-limited-access-roads |
   * avoid-private-roads |
   * avoid-roads-unsuitable-for-pedestrians |
   * avoid-stairways |
   * avoid-toll-roads |
   * avoid-toll-roads-for-trucks |
   * avoid-truck-restricted-roads |
   * avoid-unpaved-roads |
   * axle-count-restriction |
   * driving-a-bus |
   * driving-a-taxi |
   * driving-a-truck |
   * driving-an-automobile |
   * driving-an-emergency-vehicle |
   * height-restriction |
   * kingpin-to-rear-axle-length-restriction |
   * length-restriction |
   * preferred-for-pedestrians |
   * riding-a-motorcycle |
   * roads-under-construction-prohibited |
   * semi-or-tractor-with-one-or-more-trailers-prohibited |
   * single-axle-vehicles-prohibited |
   * tandem-axle-vehicles-prohibited |
   * through-traffic-prohibited |
   * truck-with-trailers-restriction |
   * use-preferred-hazmat-routes |
   * use-preferred-truck-routes |
   * walking |
   * weight-restriction |
   *
   * @see [restrictionAttributeNames](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#restrictionattributenames)
   */
  accessor restrictionAttributes: string[] | null | undefined;
  /**
   * Specifies how U-Turns should be handled.
   *
   * Possible Value                 | Description
   * -------------------------------|-------------------------------
   * allow-backtrack                | U-turns are permitted everywhere. Allowing U-turns implies that the vehicle can turn around at a junction and double back on the same street.
   * at-dead-ends-only              | U-turns are prohibited at all junctions and intersections and are permitted only at dead ends.
   * no-backtrack                   | U-turns are prohibited at all junctions, intersections, and dead-ends.
   * at-dead-ends-and-intersections | U-turns are prohibited at junctions where exactly two adjacent streets meet.
   *
   * @see [restrictUTurns](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#restrictuturns)
   */
  restrictUTurns?: UTurnRestriction | null;
  /**
   * Determines if facilities will be returned by the service.
   *
   * @default false
   * @see [returnFacilities](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#returnfacilities)
   */
  accessor returnFacilities: boolean | null | undefined;
  /**
   * Specify whether [point barriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#pointBarriers) will be returned by the routing operation.
   *
   * @default false
   * @see [returnBarriers](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#returnbarriers)
   */
  accessor returnPointBarriers: boolean | null | undefined;
  /**
   * Specify whether [polygon barriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#polygonBarriers) will be returned by the routing operation.
   *
   * @default false
   * @see [returnPolygonBarriers](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#returnpolygonbarriers)
   */
  accessor returnPolygonBarriers: boolean | null | undefined;
  /**
   * Specify whether [polyline barriers](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#polylineBarriers) will be returned by the routing operation.
   *
   * @default false
   * @see [returnPolylineBarriers](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#returnpolylinebarriers)
   */
  accessor returnPolylineBarriers: boolean | null | undefined;
  /**
   * Specifies whether the service area lines should be split at break values.
   *
   * If `true`, a service area line that intersects a break is split into two lines. This is useful if you want to
   * visualize service area lines by break value.
   *
   * @default false
   * @see [splitLinesAtBreaks](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#splitlinesatbreaks)
   */
  accessor splitLinesAtBreaks: boolean | null | undefined;
  /**
   * Specifies whether multiple service areas around a facility are created as disks or rings.
   *
   * If `true`, larger service areas do not include smaller service areas.
   * If `false`, service areas are independant and may overlap each other.
   *
   * @default false
   * @see [splitPolygonsAtBreaks](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#splitpolygonsatbreaks)
   */
  accessor splitPolygonsAtBreaks: boolean | null | undefined;
  /**
   * Specify the time and date to depart from or arrive at incidents or facilities. You can also specify a value of
   * "now", to set the depart or arrive time to current time.
   *
   * @see [timeOfDay](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#timeofday)
   */
  accessor timeOfDay: NetworkDate | null | undefined;
  /**
   * Specify the time zone or zones of the [timeOfDay](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#timeOfDay) property.
   *
   * @since 4.25
   * @see [timeOfDayIsUTC](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#timeofdayisutc)
   */
  accessor timeOfDayIsUTC: boolean | null | undefined;
  /**
   * Specifies whether the direction of travel used to generate the service area polygons is toward or away from the
   * facilities. The direction of travel may change the shape of the polygons because impedances on opposite sides of
   * streets may differ or one-way restrictions may exist, such as one-way streets.
   *
   * Possible Value | Description
   * ---------------|------------
   * from-facility  | The service area is generated in the direction away from the facilities.
   * to-facility    | The service area is created in the direction toward the facilities.
   *
   * @see [travelDirection](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#traveldirection)
   */
  travelDirection?: TravelDirection | null;
  /**
   * A travel mode represents a means of transportation, such as driving or walking. Travel modes define the physical
   * characteristics of a vehicle or pedestrian.
   *
   * Use [fetchServiceDescription()](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-networkService.html#fetchServiceDescription) to
   * obtain a list of predefined travel modes and the default travel mode that is used if one is not specified in a
   * routing reqest.
   *
   * @see [Introduction to travel modes](https://enterprise.arcgis.com/en/portal/latest/administer/windows/travel-modes.htm)
   * @see [Default travel modes](https://enterprise.arcgis.com/en/portal/latest/administer/windows/travel-modes.htm#GUID-96DF7F50-E0B2-4BF3-8271-EB515D3F0107)
   * @see [travelMode](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#travelmode)
   */
  get travelMode(): TravelMode | null | undefined;
  set travelMode(value: TravelModeProperties | null | undefined);
  /**
   * Specifies whether the service areas are trimmed.
   *
   * If `true`, service areas will be trimmed. This is useful when finding service areas in places that have a very
   * sparse street network and you don't want the service area to cover large areas where there are no street features.
   *
   * The parameter value is ignored when the [useHierarchy](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#useHierarchy) parameter is set to `true`.
   *
   * @default false
   * @see [trimOuterPolygon](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#trimouterpolygons)
   */
  accessor trimOuterPolygon: boolean | null | undefined;
  /**
   * The property defines the distance that can be reached from the network.
   *
   * This property is ignored if [trimOuterPolygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#trimOuterPolygon) is `false` or [useHierarchy](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#useHierarchy) is
   * `true`.
   *
   * @see [trimPolygonDistance](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#trimpolygondistance)
   */
  accessor trimPolygonDistance: number | null | undefined;
  /**
   * Specifies the units of the value specified [trimPolygonDistance](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#trimPolygonDistance).
   *
   * This property is ignored if [trimOuterPolygon](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#trimOuterPolygon) is `false` or [useHierarchy](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#useHierarchy) is
   * `true`.
   *
   * @see [trimPolygonDistanceUnits](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#trimpolygondistanceunits)
   */
  trimPolygonDistanceUnits?: LengthUnit | null;
  /**
   * Specify whether hierarchy should be used when finding the shortest paths. This value is ignored if a
   * [travelMode](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ServiceAreaParameters.html#travelMode) is specified.
   *
   * @see [useHierarchy](https://developers.arcgis.com/rest/services-reference/enterprise/service-area-sync/#usehierarchy)
   */
  accessor useHierarchy: boolean | null | undefined;
}
declare const ServiceAreaParametersSuperclass: typeof JSONSupport & typeof ClonableMixin