import type { DefinitionEditorJson } from "./DefinitionEditorJson.js";
import type { FeatureCollectionJson } from "./FeatureCollectionJson.js";
import type { FormInfoJson } from "./FormInfoJson.js";
import type { LayerDefinitionJson } from "./LayerDefinitionJson.js";
import type { OperationalLayerJsonBase } from "./OperationalLayerJson.js";
import type { PopupInfoJson } from "./PopupInfoJson.js";
/**
 * Feature layers can be created by referencing a layer from either a map
 * service or a feature service or by specifying a feature collection object.
 * Use a map service if you just want to retrieve geometries and attributes from
 * the server and symbolize them yourself. Use a feature service if you want to
 * take advantage of symbols from the service's source map document. Also, use a
 * feature service if you plan on doing editing with the feature layer. Feature
 * layers honor any feature templates configured in the source map document.
 * Feature collection objects are used to create a feature layer based on the
 * supplied definition.
 *
 * See
 * {@link https://developers.arcgis.com/web-map-specification/objects/featureLayer/}
 * {@link https://developers.arcgis.com/web-scene-specification/objects/featureLayer/}.
 */
export interface FeatureLayerJson extends OperationalLayerJsonBase {
    /**
     * A comma-separated string listing which editing operations are allowed on
     * an editable feature service. Available operations include: Create |
     * Delete | Query | Update | Editing.
     */
    capabilities?: string | null;
    /**
     * A sequence of custom parameters appended to the URL of all requests
     * related to supporting ArcGIS layer types.
     */
    customParameters?: Record<string, unknown> | null;
    /**
     * Stores interactive filters.
     */
    definitionEditor?: DefinitionEditorJson | null;
    /**
     * Indicates whether to allow a client to ignore popups defined by the
     * service item.
     */
    disablePopup?: boolean | null;
    /**
     * A featureCollection object defining a layer of features whose geometry
     * and attributes will be stored directly within the web map. This is only
     * used when no url property is supplied.
     */
    featureCollection?: FeatureCollectionJson | null;
    /**
     * Indicates the type of features in the feature collection. If
     * featureCollectionType is missing, it means the feature collection is a
     * regular single-layer or multi-layer feature collection.
     */
    featureCollectionType?: "markup" | "notes" | "route" | null;
    /**
     * A formInfo object defining the content of the form when you are editing a
     * feature.
     */
    formInfo?: FormInfoJson | null;
    /**
     * Optional string containing the item ID of the service if it's registered
     * on ArcGIS Online or your organization's portal.
     */
    itemId?: string | null;
    /**
     * A layerDefinition object defining the attribute schema and drawing
     * information for the layer.
     */
    layerDefinition?: LayerDefinitionJson | null;
    /**
     * The type of layer.
     */
    layerType: "ArcGISFeatureLayer";
    /**
     * Used with ArcGIS feature services and individual layers in ArcGIS map
     * services, this property determines how the features are retrieved from
     * the server. This property is represented as 0, 1, or 2.
     *
     * - 0: Snapshot mode. Immediately retrieves all features when the map is
     *   loaded.
     * - 1: On-demand mode. Features within the current view extent are retrieved
     *   as the user navigates the map. This is the default and the most common
     *   way to use feature services in web maps.
     * - 2: Selection-only mode. No features are initially retrieved. This mode is
     *   used when you have a map service and a feature service from the same
     *   parent URL that are working together in the same map, with the map
     *   service being used for display and the feature service used for
     *   editing.
     */
    mode?: 0 | 1 | 2 | 6 | null;
    /**
     * A PopupInfo object defining the content of pop-up windows when you click
     * or query a feature.
     */
    popupInfo?: PopupInfoJson | null;
    /**
     * Apply perspective scaling to screen-size symbols.
     */
    screenSizePerspective?: boolean | null;
    /**
     * Indicates whether to display labels for this layer. If true, labels will
     * appear as defined in the labelingInfo property.
     */
    showLabels?: boolean | null;
    /**
     * The feature subtype code identifying the layer. Used with
     * SubtypeGroupLayers.
     */
    subtypeCode?: string | number | null;
    /**
     * Indicates whether to disable time animation if the layer supports it.
     */
    timeAnimation?: boolean | null;
    /**
     * The URL to the layer.If the layer is not from a web service but rather a
     * feature collection, than the url property is omitted.
     */
    url?: string | null;
    /**
     * An array of sublayer ids that should appear visible. Used with feature
     * layers that are based on feature collections.
     */
    visibleLayers?: number[] | null;
}
