import type Point from "../../geometry/Point.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { PointProperties } from "../../geometry/Point.js";

/** @since 5.0 */
export interface SuggestLocationsParametersProperties extends Partial<Pick<SuggestLocationsParameters, "categories" | "text">> {
  /**
   * Defines a normalized location point that is used to sort geocoding candidates based upon their proximity
   *                                                     to the given location.
   *
   * @since 5.0
   */
  location?: PointProperties | null;
}

/** @since 5.0 */
export default class SuggestLocationsParameters extends JSONSupport {
  constructor(properties?: SuggestLocationsParametersProperties);
  /**
   * A place or address type which can be used to filter suggest results.
   *                                     The parameter supports input of single category values or multiple comma-separated values. For example,
   * "Populated Place" or "Scandinavian Food". Only applies to the World Geocode Service.
   * See [Category filtering (World Geocoding Service)](https://developers.arcgis.com/rest/geocode/api-reference/geocoding-category-filtering.htm#ESRI_SECTION1_502B3FE2028145D7B189C25B1A00E17B) for more information.
   *
   * @since 5.0
   */
  accessor categories: string[] | null;
  /**
   * Defines a normalized location point that is used to sort geocoding candidates based upon their proximity
   *                                                     to the given location.
   *
   * @since 5.0
   */
  get location(): Point | null;
  set location(value: PointProperties | null);
  /**
   * The input text entered by a user which is used by the suggest operation to generate a
   * list of possible matches.
   *
   * @since 5.0
   */
  accessor text: string | null;
}