import type Viewpoint from "../Viewpoint.js";
import type Accessor from "../core/Accessor.js";
import type SpatialReference from "../geometry/SpatialReference.js";
import type TimeExtent from "../time/TimeExtent.js";
import type ColorBackground from "./background/ColorBackground.js";
import type { ClonableMixin } from "../core/Clonable.js";
import type { TimeZone } from "../time/types.js";
import type { ColorBackgroundProperties } from "./background/ColorBackground.js";
import type { SpatialReferenceProperties } from "../geometry/SpatialReference.js";
import type { TimeExtentProperties } from "../time/TimeExtent.js";
import type { ViewpointProperties } from "../Viewpoint.js";

export interface InitialViewPropertiesProperties extends Partial<Pick<InitialViewProperties, "timeZone">> {
  /** The background color of the [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/). */
  background?: ColorBackgroundProperties | null;
  /**
   * The spatial reference of the [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/).
   * This indicates the projected or geographic coordinate system used to locate geographic features in the map.
   * For complete listings of supported coordinate systems, see
   * [Using spatial references](https://developers.arcgis.com/rest/services-reference/enterprise/using-spatial-references.htm).
   */
  spatialReference?: SpatialReferenceProperties | null;
  /**
   * The initial [time extent](https://developers.arcgis.com/javascript/latest/references/core/time/TimeExtent/) of the [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/).
   *
   * @since 4.31
   */
  timeExtent?: TimeExtentProperties | null;
  /** The initial viewpoint of the [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/). */
  viewpoint?: ViewpointProperties | null;
}

/**
 * Represents the initial viewing state of the [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/)
 * when displayed in a [MapView](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/).
 *
 * @since 4.0
 */
export default class InitialViewProperties extends InitialViewPropertiesSuperclass {
  constructor(properties?: InitialViewPropertiesProperties);
  /** The background color of the [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/). */
  get background(): ColorBackground | null | undefined;
  set background(value: ColorBackgroundProperties | null | undefined);
  /**
   * The spatial reference of the [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/).
   * This indicates the projected or geographic coordinate system used to locate geographic features in the map.
   * For complete listings of supported coordinate systems, see
   * [Using spatial references](https://developers.arcgis.com/rest/services-reference/enterprise/using-spatial-references.htm).
   */
  get spatialReference(): SpatialReference | null | undefined;
  set spatialReference(value: SpatialReferenceProperties | null | undefined);
  /**
   * The initial [time extent](https://developers.arcgis.com/javascript/latest/references/core/time/TimeExtent/) of the [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/).
   *
   * @since 4.31
   */
  get timeExtent(): TimeExtent | null | undefined;
  set timeExtent(value: TimeExtentProperties | null | undefined);
  /**
   * The initial [time zone](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#timeZone) of the [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/).
   *
   * **Possible Values**
   *
   * Value | Description |
   * ----- | ----------- |
   * system  | Dates and times are be displayed in the timezone of the device or browser.
   * unknown | Dates and times will be displayed based on the time zone that has been defined for the layer. No adjustments are made to the display of date info. Additionally, the [TimeSlider](https://developers.arcgis.com/javascript/latest/references/core/widgets/TimeSlider/) is disabled.
   * Specified IANA timezone | Dates and times will be displayed in the specified IANA time zone. See [wikipedia - List of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
   *
   * > [!WARNING]
   * >
   * > If the view’s [MapView.timeZone](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/#timeZone) is set to `unknown` and a layer’s date/time field includes time information, set the [DateTimeFieldFormat.timeStyle](https://developers.arcgis.com/javascript/latest/references/core/layers/support/DateTimeFieldFormat/#timeStyle) property to either `long` or `full` on the corresponding [date/time field](https://developers.arcgis.com/javascript/latest/references/core/layers/support/DateTimeFieldFormat/).
   *
   * @since 4.28
   * @see [MapView.timeZone](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/#timeZone)
   */
  accessor timeZone: TimeZone;
  /** The initial viewpoint of the [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/). */
  get viewpoint(): Viewpoint | null | undefined;
  set viewpoint(value: ViewpointProperties | null | undefined);
}
declare const InitialViewPropertiesSuperclass: typeof Accessor & typeof ClonableMixin