import type Graphic from "../../Graphic.js";
import type Accessor from "../../core/Accessor.js";
import type SharedTemplate from "../../editing/sharedTemplates/SharedTemplate.js";
import type FeatureTemplate from "../../layers/support/FeatureTemplate.js";
import type EditorViewModel from "./EditorViewModel.js";
import type { ReadonlyCollection } from "../../core/Collection.js";
import type { CreationInfo } from "./types.js";

export interface CreateFeaturesWorkflowDataProperties extends Partial<Pick<CreateFeaturesWorkflowData, "creationInfo" | "fullTemplate" | "viewModel">> {}

/**
 * This object supports the [Editor](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/) widget. It
 * contains data for the [CreateFeaturesWorkflow](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/CreateFeaturesWorkflow/).
 * This is accessed via the
 * [CreateFeaturesWorkflow.data](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/CreateFeaturesWorkflow/#data).
 *
 * @since 4.23
 * @see [Editor](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/)
 * @see [EditorViewModel](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/EditorViewModel/)
 * @see [Workflow](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/Workflow/)
 * @see [CreateFeaturesWorkflow](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/CreateFeaturesWorkflow/)
 * @see [UpdateWorkflow](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/UpdateWorkflow/)
 * @see [UpdateWorkflowData](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/UpdateWorkflowData/)
 */
export default class CreateFeaturesWorkflowData extends Accessor {
  constructor(properties?: CreateFeaturesWorkflowDataProperties);
  /** This provides the feature template and layer when creating a new feature. */
  accessor creationInfo: CreationInfo | null | undefined;
  /**
   * The full version of the template referenced by the property
   * `creationInfo.template`. If that template is a standard
   * [FeatureTemplate](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureTemplate/), this
   * property will simply reference that template. If the template is a
   * [SharedTemplateMetadata](https://developers.arcgis.com/javascript/latest/references/core/editing/sharedTemplates/SharedTemplateMetadata/),
   * this property will be set to an instance of
   * [SharedTemplate](https://developers.arcgis.com/javascript/latest/references/core/editing/sharedTemplates/SharedTemplate/) representing that
   * template's full definition.
   *
   * Note, if this property references an instance of
   * [SharedTemplate](https://developers.arcgis.com/javascript/latest/references/core/editing/sharedTemplates/SharedTemplate/), the instance
   * will have already been loaded. Clients assigning a new value to this
   * property should ensure that `load` has been called on the new value.
   */
  accessor fullTemplate: FeatureTemplate | SharedTemplate | null | undefined;
  /**
   * Returns a collection of [graphics](https://developers.arcgis.com/javascript/latest/references/core/Graphic/) representing features that have been created during the workflow.
   *
   * @see [CreateFeaturesWorkflow](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/CreateFeaturesWorkflow/)
   */
  get pendingFeatures(): ReadonlyCollection<Graphic>;
  /** The associated [EditorViewModel](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/EditorViewModel/) for this workflow. */
  accessor viewModel: EditorViewModel;
}