import type Accessor from "../../core/Accessor.js";
import type Collection from "../../core/Collection.js";
import type BuildingSceneLayer from "../../layers/BuildingSceneLayer.js";
import type SceneView from "../../views/SceneView.js";
import type BuildingLevel from "./BuildingLevel.js";
import type BuildingPhase from "./BuildingPhase.js";
import type { ReadonlyArrayOrCollection } from "../../core/Collection.js";
import type { BuildingSceneLayerProperties } from "../../layers/BuildingSceneLayer.js";

/** @deprecated since version 5.0. Use the [Building Explorer component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-building-explorer/) instead. For information on widget deprecation, read about [Esri's move to web components](https://developers.arcgis.com/javascript/latest/components-transition-plan/). */
export interface BuildingExplorerViewModelProperties extends Partial<Pick<BuildingExplorerViewModel, "view">> {
  /**
   * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of layers of type [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html)
   * that are added to the widget for exploration. The widget is only displayed when this property is set.
   * In case of multiple layers, the widget will display and apply the filters on all layers.
   */
  layers?: ReadonlyArrayOrCollection<BuildingSceneLayerProperties>;
}

/**
 * Provides the logic for the [BuildingExplorer](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html) widget.
 *
 * @deprecated since version 5.0. Use the [Building Explorer component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-building-explorer/) instead. For information on widget deprecation, read about [Esri's move to web components](https://developers.arcgis.com/javascript/latest/components-transition-plan/).
 * @since 4.16
 * @see [BuildingExplorer](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-BuildingExplorer.html) widget - _Deprecated since 5.0. Use the [Building Explorer component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-building-explorer/) instead._
 * @see [Building Explorer component](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-building-explorer/)
 * @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern)
 */
export default class BuildingExplorerViewModel extends Accessor {
  constructor(properties?: BuildingExplorerViewModelProperties);
  /**
   * A [Collection](https://developers.arcgis.com/javascript/latest/api-reference/esri-core-Collection.html) of layers of type [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BuildingSceneLayer.html)
   * that are added to the widget for exploration. The widget is only displayed when this property is set.
   * In case of multiple layers, the widget will display and apply the filters on all layers.
   */
  get layers(): Collection<BuildingSceneLayer>;
  set layers(value: ReadonlyArrayOrCollection<BuildingSceneLayerProperties>);
  /**
   * Contains information about the level filter, such as
   * the value selected by the user in the Level element
   * or the minimum and maximum allowed values.
   */
  get level(): BuildingLevel;
  /**
   * Contains information about the construction phase filter, such as
   * the value selected by the user in the Construction phases element
   * and the minimum and maximum allowed values.
   */
  get phase(): BuildingPhase;
  /**
   * The current state of the view model that can be used for rendering the UI of the widget.
   *
   * Value | Description
   * ------------|-------------
   * disabled | widget is being created
   * loading | layers and statistics are loading
   * ready | widget is ready
   * failed | widget failed to load data
   *
   * @default "disabled"
   */
  get state(): "disabled" | "loading" | "ready" | "failed";
  /** The view in which the BuildingExplorer is used. */
  accessor view: SceneView | null | undefined;
}