import type FeatureSet from "./FeatureSet.js";
import type TravelMode from "./TravelMode.js";
import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { AnalysisRegion, DistanceUnits, RouteShape, TimeUnits, TimeZoneUsage } from "../lastMileDelivery/types.js";
import type { FeatureSetProperties } from "./FeatureSet.js";
import type { TravelModeProperties } from "./TravelMode.js";

export interface LastMileDeliveryParametersProperties extends Partial<Pick<LastMileDeliveryParameters, "analysisRegion" | "apiKey" | "directionsLanguage" | "distanceUnits" | "earliestRouteStartDate" | "earliestRouteStartTime" | "ignoreInvalidOrderLocations" | "maximumRouteDuration" | "populateDirections" | "routeShape" | "sequenceGap" | "timeUnits" | "timeZoneUsage">> {
  /**
   * Stores the depots that are part of a given last mile delivery analysis layer. A depot is a location
   * that a vehicle departs from at the beginning of its workday and returns to at the end of the workday. Depots are locations
   * where the vehicles are loaded (for deliveries) or unloaded (for pickups). For the Last Mile Delivery solver, the routes must
   * all start at the same depot location and must all end at the same depot location. However, the start and end depot
   * locations can be different or can be modeled as virtual depot locations not explicitly specified in the problem.
   *
   * @see [Parameters: depots](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#depots)
   */
  depots?: FeatureSetProperties | null;
  /**
   * 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. A line barrier can also quickly fence off several
   * roads from being traversed, thereby channeling possible routes away from undesirable parts of the street network.
   *
   * @see [Parameters: line_barriers](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#line_barriers)
   */
  lineBarriers?: FeatureSetProperties | null;
  /**
   * Specifies one or more locations that the routes of the last mile delivery analysis will visit. For example, these are
   * the final customer locations where routes deliver packages, or the initial customer location where
   * they are picking up packages for shipment.
   *
   * @see [Parameters: orders](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#orders)
   */
  orders?: FeatureSetProperties | null;
  /**
   * Lists the specialties that can be required by orders and supported by routes.
   * A route can service an order only if it supports all the specialties required for that order.
   *
   * @see [Parameters: order_specialties](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#order_specialties)
   */
  orderSpecialties?: FeatureSetProperties | null;
  /**
   * 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 [Parameters: point_barriers](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#point_barriers)
   */
  pointBarriers?: FeatureSetProperties | null;
  /**
   * 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 [Parameters: polygon_barriers](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#polygon_barriers)
   */
  polygonBarriers?: FeatureSetProperties | null;
  /**
   * Identifies one or more routes that describe vehicle and driver characteristics.
   * A route can have start and end depot service times, a fixed or flexible starting time, time-based
   * operating costs, distance-based operating costs, multiple capacities, various constraints on a driver's workday, and so on.
   *
   * @see [Parameters: routes](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#routes)
   */
  routes?: FeatureSetProperties | null;
  /**
   * Lists the specialties that can be required by orders and supported by routes.
   * A route can service an order only if it supports all the specialties required for that order.
   *
   * @see [Parameters: route_specialties](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#route_specialties)
   */
  routeSpecialties?: FeatureSetProperties | 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/references/core/rest/networkService/#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 [Parameters: travel_mode](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#travel_mode)
   */
  travelMode?: TravelModeProperties | null;
  /**
   * Zones specify a work territory. It is a [Polygon](https://developers.arcgis.com/javascript/latest/references/core/geometry/Polygon/) [feature set](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/)
   * and is used to constrain servicing to only those orders that fall within or near an area.
   *
   * @see [Parameters: zones](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#zones)
   */
  zones?: FeatureSetProperties | null;
}

/**
 * LastMileDeliveryParameters provides the input parameters for a [lastMileDelivery](https://developers.arcgis.com/javascript/latest/references/core/rest/lastMileDelivery/) request.
 *
 * @since 4.34
 * @see [lastMileDelivery](https://developers.arcgis.com/javascript/latest/references/core/rest/lastMileDelivery/)
 */
export default class LastMileDeliveryParameters extends LastMileDeliveryParametersSuperclass {
  constructor(properties?: LastMileDeliveryParametersProperties);
  /**
   * Use this property to specify the region in which to perform the analysis. If a value is not specified for this parameter,
   * the service will automatically calculate the region name based on the location of the input points. Setting the name
   * of the region is recommended to speed up the analysis.
   *
   * @see [Parameters: analysisRegion](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#analysis_region)
   */
  analysisRegion?: AnalysisRegion | null;
  /**
   * 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/references/core/config/#Config-apiKey).
   *
   * @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/routing/last-mile-delivery-service/#token)
   */
  accessor apiKey: string | null | undefined;
  /**
   * Stores the depots that are part of a given last mile delivery analysis layer. A depot is a location
   * that a vehicle departs from at the beginning of its workday and returns to at the end of the workday. Depots are locations
   * where the vehicles are loaded (for deliveries) or unloaded (for pickups). For the Last Mile Delivery solver, the routes must
   * all start at the same depot location and must all end at the same depot location. However, the start and end depot
   * locations can be different or can be modeled as virtual depot locations not explicitly specified in the problem.
   *
   * @see [Parameters: depots](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#depots)
   */
  get depots(): FeatureSet | null | undefined;
  set depots(value: FeatureSetProperties | null | undefined);
  /**
   * The language that will be used when generating travel directions. This parameter applies only when the
   * [populateDirections](https://developers.arcgis.com/javascript/latest/references/core/rest/support/LastMileDeliveryParameters/#populateDirections) parameter is set to `true`. The service supports generating directions in
   * the following languages: `ar`, `bg`, `bs`, `ca`, `cs`, `da`, `de`, `el`, `en`, `es`, `et`, `fi`, `fr`, `he`, `hr`,
   * `hu`, `id`, `it`, `ja`, `ko`, `lt`, `lv`, `nb`, `nl`, `pl`, `pt-BR`, `pt-PT`, `ro`, `ru`, `sk`, `sl`, `sr`, `sv`,
   * `th`, `tr`, `uk`, `vi`, `zh-CN`, `zh-HK` and `zh-TW`.
   *
   * @see [Parameters: directions_language](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#directions_language)
   */
  accessor directionsLanguage: string | null | undefined;
  /**
   * Specify the units that should be used to measure and report the total travel distance between each origin-destination pair.
   * Many parameters in a last mile delivery problem analysis have attributes for storing distance values,
   * such as MaxTotalDistance for the routes parameter. To minimize data entry requirements, these attribute
   * values don't include units. Instead, all distance-based attribute values must be entered in the same units, and this parameter is used to specify the units of those values
   *
   * @see [Parameters: distance_units](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#distance_units)
   */
  distanceUnits?: DistanceUnits | null;
  /**
   * Use this property to specify the default earliest start date for routes. This date is in the form YYYY-MM-DD and is used for all routes for which the EarliestStartDate
   * attribute in the routes parameter is null. When this property is not specified, the EarliestStartDate attribute for all graphics in [routes](https://developers.arcgis.com/javascript/latest/references/core/rest/support/LastMileDeliveryParameters/#routes) must be set.
   *
   * @see [Parameters: earliest_route_start_date](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#earliest_route_start_date)
   * @see [Parameters: route](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#routes)
   */
  accessor earliestRouteStartDate: string | null | undefined;
  /**
   * Use this parameter to specify the default earliest start time for routes. This time of day is used
   * for all routes for which the EarliestStartTime attribute in the routes parameter is null.
   * When this property is not specified, all rows in the routes parameter must specify a value in the
   * EarliestStartTime attribute. The format to provide the start date is hh:mm:ss, for example, 14:30:30.
   *
   * @see [Parameters: earliest_route_start_time](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#earliest_route_start_time)
   */
  accessor earliestRouteStartTime: string | null | undefined;
  /**
   * If `true` the solver will ignore any invalid orders and return a solution, given it didn't encounter any other errors. To generate routes
   * and deliver them to drivers immediately, you may be able to ignore invalid orders, solve, and distribute the routes to your drivers. Then, resolve
   * any invalid orders from the last solve and include them in the fleet routing analysis for the next workday or work shift.
   * If `false` the solve operation will fail when any invalid orders are encountered. An invalid order is an order that the fleet routing solver can't
   * reach. An order may be unreachable for a variety of reasons, including when the order is located on a prohibited network element, isn't located on the
   * network at all, or is located on a disconnected portion of the network.
   *
   * @see [Parameters: ignore_invalid_order_locations](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#ignore_invalid_order_locations)
   */
  accessor ignoreInvalidOrderLocations: boolean | null | undefined;
  /**
   * 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. A line barrier can also quickly fence off several
   * roads from being traversed, thereby channeling possible routes away from undesirable parts of the street network.
   *
   * @see [Parameters: line_barriers](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#line_barriers)
   */
  get lineBarriers(): FeatureSet | null | undefined;
  set lineBarriers(value: FeatureSetProperties | null | undefined);
  /**
   * Use this property to specify the maximum allowed total time for each route. The value can be any positive number.
   * The value is used for all routes when the MaxTotalTime attribute in the routes parameter is null. When no value is specified
   * for maximumRouteDuration, all rows in the routes parameter must specify a value in the MaxTotalTime attribute.
   *
   * The value is interpreted in the units specified in the [timeUnits](https://developers.arcgis.com/javascript/latest/references/core/rest/support/LastMileDeliveryParameters/#timeUnits) property.
   *
   * @see [Parameters: max_route_total_time](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#max_route_total_time)
   */
  accessor maximumRouteDuration: number | null | undefined;
  /**
   * Specifies one or more locations that the routes of the last mile delivery analysis will visit. For example, these are
   * the final customer locations where routes deliver packages, or the initial customer location where
   * they are picking up packages for shipment.
   *
   * @see [Parameters: orders](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#orders)
   */
  get orders(): FeatureSet | null | undefined;
  set orders(value: FeatureSetProperties | null | undefined);
  /**
   * Lists the specialties that can be required by orders and supported by routes.
   * A route can service an order only if it supports all the specialties required for that order.
   *
   * @see [Parameters: order_specialties](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#order_specialties)
   */
  get orderSpecialties(): FeatureSet | null | undefined;
  set orderSpecialties(value: FeatureSetProperties | null | undefined);
  /**
   * 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 [Parameters: point_barriers](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#point_barriers)
   */
  get pointBarriers(): FeatureSet | null | undefined;
  set pointBarriers(value: FeatureSetProperties | null | undefined);
  /**
   * 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 [Parameters: polygon_barriers](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#polygon_barriers)
   */
  get polygonBarriers(): FeatureSet | null | undefined;
  set polygonBarriers(value: FeatureSetProperties | null | undefined);
  /**
   * If `true`, directions will be generated and configured based on the value of
   * the [directionsLanguage](https://developers.arcgis.com/javascript/latest/references/core/rest/support/LastMileDeliveryParameters/#directionsLanguage) property.
   * If `false`, directions will not be generated, and the service returns an empty value
   * for the feature sets returned by [getDirectionPoints()](https://developers.arcgis.com/javascript/latest/references/core/rest/lastMileDelivery/#getDirectionPoints) and [getDirectionLines()](https://developers.arcgis.com/javascript/latest/references/core/rest/lastMileDelivery/#getDirectionLines) output parameter
   *
   * @see [Parameters: populate_directions](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#populate_directions)
   */
  accessor populateDirections: boolean | null | undefined;
  /**
   * Identifies one or more routes that describe vehicle and driver characteristics.
   * A route can have start and end depot service times, a fixed or flexible starting time, time-based
   * operating costs, distance-based operating costs, multiple capacities, various constraints on a driver's workday, and so on.
   *
   * @see [Parameters: routes](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#routes)
   */
  get routes(): FeatureSet | null | undefined;
  set routes(value: FeatureSetProperties | null | undefined);
  /**
   * Specifies the type of features that are returned by [getRoutes()](https://developers.arcgis.com/javascript/latest/references/core/rest/lastMileDelivery/#getRoutes) method.
   *
   * @see [Parameters: route_shape](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#route_shape)
   */
  routeShape?: RouteShape | null;
  /**
   * Lists the specialties that can be required by orders and supported by routes.
   * A route can service an order only if it supports all the specialties required for that order.
   *
   * @see [Parameters: route_specialties](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#route_specialties)
   */
  get routeSpecialties(): FeatureSet | null | undefined;
  set routeSpecialties(value: FeatureSetProperties | null | undefined);
  /**
   * Use this parameter to specify the gap in numerical values to leave in the Sequence attribute in
   * the orders parameter between adjacent orders when the analysis is solved. The value acts as
   * a multiplier for the actual sequence of orders on each route.
   *
   * @see [Parameters: sequence_gap](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#sequence_gap)
   */
  accessor sequenceGap: number | null | undefined;
  /**
   * Specifies the temporal units used by time-based properties like the
   * `ServiceTime` and `CostPerUnitTime` graphic attributes in
   * [orders](https://developers.arcgis.com/javascript/latest/references/core/rest/support/LastMileDeliveryParameters/#orders) and [routes](https://developers.arcgis.com/javascript/latest/references/core/rest/support/LastMileDeliveryParameters/#routes) respectively.
   *
   * @see [Parameters: time_units](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#time_units)
   */
  timeUnits?: TimeUnits | null;
  /**
   * Use this parameter to specify the time zone for the input date-time fields.
   *
   * @see [Parameters: time_zone_usage_for_time_fields](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#time_zone_usage_for_time_fields)
   */
  timeZoneUsage?: TimeZoneUsage | 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/references/core/rest/networkService/#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 [Parameters: travel_mode](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#travel_mode)
   */
  get travelMode(): TravelMode | null | undefined;
  set travelMode(value: TravelModeProperties | null | undefined);
  /**
   * Zones specify a work territory. It is a [Polygon](https://developers.arcgis.com/javascript/latest/references/core/geometry/Polygon/) [feature set](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/)
   * and is used to constrain servicing to only those orders that fall within or near an area.
   *
   * @see [Parameters: zones](https://developers.arcgis.com/rest/routing/last-mile-delivery-service/#zones)
   */
  get zones(): FeatureSet | null | undefined;
  set zones(value: FeatureSetProperties | null | undefined);
}
declare const LastMileDeliveryParametersSuperclass: typeof JSONSupport & typeof ClonableMixin