import type AnalysisOriginWebScene from "./support/AnalysisOriginWebScene.js";
import type Accessor from "../core/Accessor.js";
import type { AnalysisType } from "./types.js";
import type { ClonableMixin, ClonableMixinProperties } from "../core/Clonable.js";
import type { IdentifiableMixin, IdentifiableMixinProperties } from "../core/Identifiable.js";
import type { JSONSupportMixin, JSONSupportMixinProperties } from "../core/JSONSupport.js";
import type { AnalysisOriginWebSceneProperties } from "./support/AnalysisOriginWebScene.js";

export interface AnalysisProperties extends IdentifiableMixinProperties, ClonableMixinProperties, JSONSupportMixinProperties {
  /**
   * A user settable identifier for the analysis. A unique value is automatically generated when
   * the analysis is created if it is not set explicitly during construction.
   */
  id?: string;
  /**
   * The origin of the analysis. The origin can be of type `web-scene` when the analysis was applied from the
   * [WebScene#initialViewProperties](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#initialViewProperties) or a
   * [Slide](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html).
   */
  origin?: (AnalysisOriginWebSceneProperties & { type: "web-scene" }) | null;
}

/**
 * Abstract base class for all analysis objects.
 *
 * @since 4.33
 */
export default abstract class Analysis extends AnalysisSuperclass {
  /**
   * A user settable identifier for the analysis. A unique value is automatically generated when
   * the analysis is created if it is not set explicitly during construction.
   */
  get id(): string;
  /**
   * The origin of the analysis. The origin can be of type `web-scene` when the analysis was applied from the
   * [WebScene#initialViewProperties](https://developers.arcgis.com/javascript/latest/api-reference/esri-WebScene.html#initialViewProperties) or a
   * [Slide](https://developers.arcgis.com/javascript/latest/api-reference/esri-webscene-Slide.html).
   */
  get origin(): AnalysisOriginWebScene | null | undefined;
  set origin(value: (AnalysisOriginWebSceneProperties & { type: "web-scene" }) | null | undefined);
  abstract readonly type: AnalysisType;
}
declare const AnalysisSuperclass: typeof Accessor & typeof IdentifiableMixin & typeof ClonableMixin & typeof JSONSupportMixin