import type Accessor from "../../core/Accessor.js";
import type { MapViewOrSceneView } from "../../views/MapViewOrSceneView.js";

export interface FullscreenViewModelProperties extends Partial<Pick<FullscreenViewModel, "view">> {
  /** The [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) to present in fullscreen mode. */
  element?: HTMLElement | null;
}

export type FullscreenViewModelState = "active" | "disabled" | "feature-unsupported" | "ready";

/**
 * Provides the logic for the [Fullscreen](https://developers.arcgis.com/javascript/latest/references/core/widgets/Fullscreen/) widget.
 *
 * @deprecated since version 4.33. Use the JavaScript [Fullscreen API](https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API) directly instead.
 * @since 4.6
 * @see [Fullscreen](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-fullscreen/) component
 * @see [Fullscreen](https://developers.arcgis.com/javascript/latest/references/core/widgets/Fullscreen/) widget - _Deprecated since 4.32. Use the [Fullscreen component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-fullscreen/) instead._
 * @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern)
 */
export default class FullscreenViewModel extends Accessor {
  constructor(properties?: FullscreenViewModelProperties);
  /** The [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) to present in fullscreen mode. */
  get element(): HTMLElement | null;
  set element(value: HTMLElement | null | undefined);
  /**
   * The view model's state.
   *
   * @default "disabled"
   */
  get state(): FullscreenViewModelState;
  /** The view associated with the widget instance. */
  accessor view: MapViewOrSceneView | null | undefined;
  /** Enter fullscreen */
  enter(): void;
  /** Exit fullscreen */
  exit(): void;
  /** Toggle fullscreen */
  toggle(): void;
}