import type Viewpoint from "../Viewpoint.js";
import type Collection from "../core/Collection.js";
import type SpatialReference from "../geometry/SpatialReference.js";
import type TimeExtent from "../time/TimeExtent.js";
import type WebSceneEnvironment from "./Environment.js";
import type { ClonableMixin } from "../core/Clonable.js";
import type { JSONSupport } from "../core/JSONSupport.js";
import type { WebSceneSliceAnalysis } from "./types.js";
import type { ReadonlyArrayOrCollection } from "../core/Collection.js";
import type { EnvironmentProperties } from "./Environment.js";
import type { SpatialReferenceProperties } from "../geometry/SpatialReference.js";
import type { ViewpointProperties } from "../Viewpoint.js";
import type { TimeExtentProperties } from "../time/TimeExtent.js";

export interface InitialViewPropertiesProperties extends Partial<Pick<InitialViewProperties, "viewingMode">> {
  /**
   * List of initial analyses. Only [SliceAnalysis](https://developers.arcgis.com/javascript/latest/references/core/analysis/SliceAnalysis/) are currently
   * supported in the initial view properties.
   *
   * @since 4.33
   */
  analyses?: ReadonlyArrayOrCollection<WebSceneSliceAnalysis>;
  /** The initial environment settings of the [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/). */
  environment?: EnvironmentProperties;
  /**
   * The spatial reference of the [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/).
   * This indicates the projected or geographic coordinate system used to locate geographic features in the map.
   * In a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/) the following
   * [supported coordinate systems](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#supported-coordinate-systems) are available.
   */
  spatialReference?: SpatialReferenceProperties | null;
  /**
   * The initial time extent of the [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/).
   *
   * @since 4.30
   */
  timeExtent?: TimeExtentProperties | null;
  /** The initial viewpoint of the [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/). */
  viewpoint?: ViewpointProperties | null;
}

/**
 * Represents the initial viewing state of the [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/)
 * when displayed in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/). It contains the
 * initial [viewpoint](https://developers.arcgis.com/javascript/latest/references/core/webscene/InitialViewProperties/#viewpoint) as well as the initial [environment](https://developers.arcgis.com/javascript/latest/references/core/webscene/InitialViewProperties/#environment) settings.
 *
 * @since 4.0
 */
export default class InitialViewProperties extends InitialViewPropertiesSuperclass {
  constructor(properties?: InitialViewPropertiesProperties);
  /**
   * List of initial analyses. Only [SliceAnalysis](https://developers.arcgis.com/javascript/latest/references/core/analysis/SliceAnalysis/) are currently
   * supported in the initial view properties.
   *
   * @since 4.33
   */
  get analyses(): Collection<WebSceneSliceAnalysis>;
  set analyses(value: ReadonlyArrayOrCollection<WebSceneSliceAnalysis>);
  /** The initial environment settings of the [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/). */
  get environment(): WebSceneEnvironment;
  set environment(value: EnvironmentProperties);
  /**
   * The spatial reference of the [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/).
   * This indicates the projected or geographic coordinate system used to locate geographic features in the map.
   * In a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/) the following
   * [supported coordinate systems](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#supported-coordinate-systems) are available.
   */
  get spatialReference(): SpatialReference | null | undefined;
  set spatialReference(value: SpatialReferenceProperties | null | undefined);
  /**
   * The initial time extent of the [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/).
   *
   * @since 4.30
   */
  get timeExtent(): TimeExtent | null | undefined;
  set timeExtent(value: TimeExtentProperties | null | undefined);
  /**
   * The viewing mode of the scene. Global scenes allow the user to
   * navigate the globe. Local scenes allow for navigation and feature
   * display in a particular "localized" area. Users may also navigate
   * the view's camera below the surface of a basemap in local scenes.
   *
   * @default "global"
   * @see [Sample - Create a local scene](https://developers.arcgis.com/javascript/latest/sample-code/scene-local/)
   */
  accessor viewingMode: "local" | "global";
  /** The initial viewpoint of the [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/). */
  get viewpoint(): Viewpoint | null | undefined;
  set viewpoint(value: ViewpointProperties | null | undefined);
}
declare const InitialViewPropertiesSuperclass: typeof JSONSupport & typeof ClonableMixin