import type { EditsResultEvent } from "../../editing/types.js";

/** @since 5.0 */
export interface EditBusLayerEvents {
  /**
   * Fires after [FeatureLayer.applyEdits()](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#applyEdits) is completed successfully.
   * The event payload includes only successful edits, not the failed edits.
   * `applyEdits()` will pass in a `sessionId` during an active edit session.
   *
   * @see [FeatureLayer.applyEdits()](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#applyEdits)
   * @example
   * // This function will fire each time applyEdits() is completed successfully
   * layer.on("edits", function(event) {
   *
   *   const extractObjectId = function(result) {
   *     return result.objectId;
   *   };
   *
   *   const adds = event.addedFeatures.map(extractObjectId);
   *   console.log("addedFeatures: ", adds.length, adds);
   *
   *   const updates = event.updatedFeatures.map(extractObjectId);
   *   console.log("updatedFeatures: ", updates.length, updates);
   *
   *   const deletes = event.deletedFeatures.map(extractObjectId);
   *   console.log("deletedFeatures: ", deletes.length, deletes);
   * });
   */
  edits: EditsResultEvent;
}

/** @since 5.0 */
export abstract class EditBusLayer {
  constructor(...args: any[]);
  /** @since 5.0 */
  "@eventTypes": EditBusLayerEvents;
}