import type Layer from "./Layer.js";
import type PictureMarkerSymbol from "../symbols/PictureMarkerSymbol.js";
import type SimpleFillSymbol from "../symbols/SimpleFillSymbol.js";
import type SimpleLineSymbol from "../symbols/SimpleLineSymbol.js";
import type SimpleMarkerSymbol from "../symbols/SimpleMarkerSymbol.js";
import type { MultiOriginJSONSupportMixin } from "../core/MultiOriginJSONSupport.js";
import type { BlendLayer, BlendLayerProperties } from "./mixins/BlendLayer.js";
import type { OperationalLayer, OperationalLayerProperties } from "./mixins/OperationalLayer.js";
import type { PortalLayer, PortalLayerProperties } from "./mixins/PortalLayer.js";
import type { RefreshableLayer, RefreshableLayerProperties } from "./mixins/RefreshableLayer.js";
import type { ScaleRangeLayer, ScaleRangeLayerProperties } from "./mixins/ScaleRangeLayer.js";
import type { SimpleLineSymbolProperties } from "../symbols/SimpleLineSymbol.js";
import type { SimpleMarkerSymbolProperties } from "../symbols/SimpleMarkerSymbol.js";
import type { PictureMarkerSymbolProperties } from "../symbols/PictureMarkerSymbol.js";
import type { SimpleFillSymbolProperties } from "../symbols/SimpleFillSymbol.js";
import type { LayerProperties } from "./Layer.js";

export interface GeoRSSLayerProperties extends LayerProperties, ScaleRangeLayerProperties, PortalLayerProperties, OperationalLayerProperties, RefreshableLayerProperties, BlendLayerProperties, Partial<Pick<GeoRSSLayer, "legendEnabled" | "url">> {
  /** Symbol used to represent line features from the GeoRSS feed. */
  lineSymbol?: (SimpleLineSymbolProperties & { type: "simple-line" }) | null;
  /** Symbol used to represent point features from the GeoRSS feed. */
  pointSymbol?: (PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | null;
  /** Symbol used to represent polygon features from the GeoRSS feed. */
  polygonSymbol?: (SimpleFillSymbolProperties & { type: "simple-fill" }) | null;
  /**
   * Refresh interval of the layer in minutes. Value of `0` indicates no refresh.
   *
   * @default 0
   * @since 4.22
   * @see [refresh()](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoRSSLayer/#refresh)
   * @see [refresh event](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoRSSLayer/#event-refresh)
   * @example
   * // the layer will be refreshed every 6 minute.
   * layer.refreshInterval = 1;
   * @see [RefreshableLayer.refresh()](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/RefreshableLayer/#refresh)
   * @see [refresh event](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/RefreshableLayer/#event-refresh)
   * @example
   * // the layer will be refreshed every minute.
   * layer.refreshInterval = 1;
   */
  refreshInterval?: number;
  /**
   * The title of the layer used to identify it in places such as the [Legend](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-legend/)
   * and [LayerList](https://developers.arcgis.com/javascript/latest/references/core/widgets/LayerList/).
   *
   * When the layer is loaded from a portal item, the title of the portal item will be used.
   * If a layer is loaded as part of a webmap or a webscene, then the title of the layer as stored in the webmap/webscene will be used.
   */
  title?: string | null;
}

/**
 * The GeoRSSLayer class is used to create a layer based on [GeoRSS](https://www.ogc.org/standards/georss).
 * GeoRSS is a way to add geographic information to an RSS feed. The GeoRSSLayer supports both
 * `GeoRSS-Simple` and `GeoRSS GML` encodings, and multiple geometry types.
 *
 * It exports custom RSS tags as additional attribute fields in the form of simple strings or an array of JSON objects.
 *
 * The GeoRSSLayer uses a utility service from [ArcGIS.com](https://www.arcgis.com). Therefore a GeoRSS file must be
 * publicly accessible on the internet. If the GeoRSS files are behind the firewall you must to set the
 * [esriConfig.geoRSSServiceUrl](https://developers.arcgis.com/javascript/latest/references/core/config/#Config-geoRSSServiceUrl) to your own utility service (requires ArcGIS Enterprise).
 *
 * [![georss-sample](https://developers.arcgis.com/javascript/latest/assets/references/core/layers/layers-georss.avif)](https://developers.arcgis.com/javascript/latest/sample-code/layers-georss/)
 *
 * > [!WARNING]
 * >
 * > **Known Limitations**
 * >
 * > Currently the GeoRSSLayer is not supported in SceneView.
 *
 * @since 4.3
 * @see [Add a GeoRSSLayer to your Map](https://developers.arcgis.com/javascript/latest/sample-code/layers-georss/)
 */
export default class GeoRSSLayer extends GeoRSSLayerSuperclass {
  /**
   * @example
   * // Typical usage
   * esriConfig.geoRSSServiceUrl = "https://utility.arcgis.com/sharing/rss";
   *
   * const layer = new GeoRSSLayer({
   *   url: "https://disasterscharter.org/charter-portlets/cpi-mvc/activations/feed/rss/"
   * });
   */
  constructor(properties?: GeoRSSLayerProperties);
  /**
   * Indicates whether the layer will be included in the legend.
   *
   * @default true
   */
  accessor legendEnabled: boolean;
  /** Symbol used to represent line features from the GeoRSS feed. */
  get lineSymbol(): SimpleLineSymbol | null | undefined;
  set lineSymbol(value: (SimpleLineSymbolProperties & { type: "simple-line" }) | null | undefined);
  /** Symbol used to represent point features from the GeoRSS feed. */
  get pointSymbol(): PictureMarkerSymbol | SimpleMarkerSymbol | null | undefined;
  set pointSymbol(value: (PictureMarkerSymbolProperties & { type: "picture-marker" }) | (SimpleMarkerSymbolProperties & { type: "simple-marker" }) | null | undefined);
  /** Symbol used to represent polygon features from the GeoRSS feed. */
  get polygonSymbol(): SimpleFillSymbol | null | undefined;
  set polygonSymbol(value: (SimpleFillSymbolProperties & { type: "simple-fill" }) | null | undefined);
  /**
   * Refresh interval of the layer in minutes. Value of `0` indicates no refresh.
   *
   * @default 0
   * @since 4.22
   * @see [refresh()](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoRSSLayer/#refresh)
   * @see [refresh event](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoRSSLayer/#event-refresh)
   * @example
   * // the layer will be refreshed every 6 minute.
   * layer.refreshInterval = 1;
   * @see [RefreshableLayer.refresh()](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/RefreshableLayer/#refresh)
   * @see [refresh event](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/RefreshableLayer/#event-refresh)
   * @example
   * // the layer will be refreshed every minute.
   * layer.refreshInterval = 1;
   */
  accessor refreshInterval: number;
  /**
   * The title of the layer used to identify it in places such as the [Legend](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-legend/)
   * and [LayerList](https://developers.arcgis.com/javascript/latest/references/core/widgets/LayerList/).
   *
   * When the layer is loaded from a portal item, the title of the portal item will be used.
   * If a layer is loaded as part of a webmap or a webscene, then the title of the layer as stored in the webmap/webscene will be used.
   */
  accessor title: string | null | undefined;
  /** The layer type provides a convenient way to check the type of the layer without the need to import specific layer modules. */
  get type(): "geo-rss";
  /** The URL pointing to a GeoRSS file. This must be publicly available. */
  accessor url: string | null | undefined;
  /**
   * Fetches all the data for the layer.
   *
   * @since 4.22
   * @see [refreshInterval](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoRSSLayer/#refreshInterval)
   * @see [refresh event](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoRSSLayer/#event-refresh)
   * @see [RefreshableLayer.refreshInterval](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/RefreshableLayer/#refreshInterval)
   * @see [refresh event](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/RefreshableLayer/#event-refresh)
   */
  refresh(): void;
}
declare const GeoRSSLayerSuperclass: typeof Layer & typeof MultiOriginJSONSupportMixin & typeof ScaleRangeLayer & typeof PortalLayer & typeof OperationalLayer & typeof RefreshableLayer & typeof BlendLayer