import type FeatureFilter from "./FeatureFilter.js";
import type FeatureLayerSource from "./FeatureLayerSource.js";
import type { ClonableMixin, ClonableMixinProperties } from "../../core/Clonable.js";
import type { JSONSupport, JSONSupportMixinProperties } from "../../core/JSONSupport.js";
import type { FeatureLayerSourceProperties } from "./FeatureLayerSource.js";
import type { FeatureFilterProperties } from "./FeatureFilter.js";

export interface FeatureFenceParametersProperties extends JSONSupportMixinProperties, ClonableMixinProperties, Partial<Pick<FeatureFenceParameters, "bufferDistance">> {
  /** An object defining the source for a feature layer to be used as fences. */
  fenceSource?: FeatureLayerSourceProperties | null;
  /** An optional filter to reduce the features used for the parameters. */
  filter?: FeatureFilterProperties | null;
}

/**
 * Fence parameters for a Geotrigger that uses feature data from an online feature service.
 *
 * @since 4.24
 * @example
 * let fenceParameters = new FeatureFenceParameters({
 *   fenceSource: { // autocasts as new FeatureLayerSource()
 *     layerUrl: "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Recreation/MapServer/0"
 *   },
 *   filter: { // autocasts as new FeatureFilter()
 *     where: "facility = 6",
 *     geometry: {
 *       x: 13871520.850500003,
 *       y: 3910293.086000003,
 *       spatialReference: {
 *         wkid: 102100,
 *         latestWkid: 3857
 *       }
 *     }
 *   },
 *   bufferDistance: 50 // meters
 * })
 */
export default class FeatureFenceParameters extends FeatureFenceParametersSuperclass {
  constructor(properties?: FeatureFenceParametersProperties);
  /** An optional buffer distance to apply to fence features in meters. */
  accessor bufferDistance: number | null | undefined;
  /** An object defining the source for a feature layer to be used as fences. */
  get fenceSource(): FeatureLayerSource | null | undefined;
  set fenceSource(value: FeatureLayerSourceProperties | null | undefined);
  /** An optional filter to reduce the features used for the parameters. */
  get filter(): FeatureFilter | null | undefined;
  set filter(value: FeatureFilterProperties | null | undefined);
  /** String indicating the fence parameters type. */
  readonly type: "features";
}
declare const FeatureFenceParametersSuperclass: typeof JSONSupport & typeof ClonableMixin