import type Layer from "../../../layers/Layer.js";

/**
 * This class contains performance information like memory usage and number of features for a specific layer.
 *
 * > [!WARNING]
 * >
 * > **This class is experimental** and should be used for debugging purposes only.
 * > Its interface will change in future releases.
 *
 * @since 4.15
 * @see [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/)
 * @see [Sample - SceneView memory resources](https://developers.arcgis.com/javascript/latest/sample-code/sceneview-memory/)
 */
export default abstract class LayerPerformanceInfo {
  /**
   * The number of features displayed in the SceneView. This
   * property is only available for [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/),
   * [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/), [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/) and
   * [point SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/).
   *
   * @default 0
   */
  readonly displayedNumberOfFeatures: number;
  /** The layer corresponding to the memory usage information. */
  readonly layer?: Layer | null;
  /**
   * The maximum number of features that can be displayed in the layer.
   *
   * This number depends on the symbol complexity and [quality profile](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#qualityProfile) of the SceneView.
   * If you want to increase it manually, set the
   * [FeatureLayerView.maximumNumberOfFeatures](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLayerView/#maximumNumberOfFeatures)
   * property. This property is only available for [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/),
   * [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/), [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/) and
   * [point SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/).
   */
  readonly maximumNumberOfFeatures?: number | null;
  /**
   * An estimate of the memory currently in use by the layer, in bytes.
   *
   * @default 0
   */
  readonly memory: number;
  /**
   * The total number of features contained in the layer. This
   * property is only available for [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/), [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/) and
   * [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/).
   */
  readonly totalNumberOfFeatures?: number | null;
}