import type Collection from "../../core/Collection.js";
import type LayerView from "./LayerView.js";
import type { LayerViewProperties } from "./LayerView.js";

export interface GroupLayerViewProperties<TLayerView extends LayerView> extends LayerViewProperties, Partial<Pick<GroupLayerView<TLayerView>, "layerViews">> {}

/**
 * Represents the [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/) of a [GroupLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GroupLayer/)
 * after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/references/core/Map/) in either a [MapView](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/), [Map component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-map/),
 * [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/) or [Scene component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-scene/).
 * The GroupLayerView provides access to a collection of [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/)s.
 * Each layer view represents a layer in the [GroupLayer.layers](https://developers.arcgis.com/javascript/latest/references/core/layers/GroupLayer/#layers) collection of the [GroupLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GroupLayer/).
 *
 * @since 4.31
 * @see [GroupLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GroupLayer/)
 */
export default abstract class GroupLayerView<TLayerView extends LayerView> extends LayerView {
  /**
   * A collection of layer views within the GroupLayerView.
   * Each layer view represents a layer in the [GroupLayer.layers](https://developers.arcgis.com/javascript/latest/references/core/layers/GroupLayer/#layers) collection
   * of the [GroupLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GroupLayer/).
   */
  accessor layerViews: Collection<TLayerView>;
}