import type ExpressionInfo from "./ExpressionInfo.js";
import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { ExpressionInfoProperties } from "./ExpressionInfo.js";

export interface DeviceLocationFeedProperties {
  /** An optional Arcade expression that controls whether a location update will be used by a geotrigger. For example, the expression could reject GPS updates with a poor horizontal accuracy. This expression uses the [Location Update Constraint](https://developers.arcgis.com/arcade/profiles/location-update-constraint/) Arcade profile. The expression should return a Boolean where false indicates the location will not be used. */
  filterExpression?: ExpressionInfoProperties | null;
}

/**
 * A Geotrigger feed which uses the device location to provide updates.
 *
 * @since 4.24
 * @example
 * let feed = new DeviceLocationFeed({
 *   filterExpression: { // autocasts as new ExpressionInfo()
 *     title: "Location filter",
 *     expression: "return $locationupdate.horizontalaccuracy <= 20"
 *   }
 * })
 */
export default class DeviceLocationFeed extends DeviceLocationFeedSuperclass {
  constructor(properties?: DeviceLocationFeedProperties);
  /** An optional Arcade expression that controls whether a location update will be used by a geotrigger. For example, the expression could reject GPS updates with a poor horizontal accuracy. This expression uses the [Location Update Constraint](https://developers.arcgis.com/arcade/profiles/location-update-constraint/) Arcade profile. The expression should return a Boolean where false indicates the location will not be used. */
  get filterExpression(): ExpressionInfo | null | undefined;
  set filterExpression(value: ExpressionInfoProperties | null | undefined);
  /** String indicating the type of Geotrigger feed. */
  get type(): "device-location";
}
declare const DeviceLocationFeedSuperclass: typeof JSONSupport & typeof ClonableMixin