import type Accessor from "../../core/Accessor.js";
import type { AttachmentCapabilities, CreateCapabilities, DeleteCapabilities, UpdateCapabilities } from "./types.js";
import type { EditorLayerUnion } from "../../widgets/Editor/types.js";

export interface EditingCapabilitiesProperties extends Partial<Pick<EditingCapabilities, "layer">> {}

/**
 * The default editing capabilities for the provided layer.
 *
 * @since 5.0
 */
export default class EditingCapabilities extends Accessor {
  constructor(properties: EditingCapabilitiesProperties);
  /**
   * The editing capabilities for attachments.
   *
   * @since 5.0
   */
  get attachments(): AttachmentCapabilities;
  /**
   * The editing capabilities for creating features.
   *
   * @since 5.0
   */
  get create(): CreateCapabilities;
  /**
   * The editing capabilities for deleting features.
   *
   * @since 5.0
   */
  get delete(): DeleteCapabilities;
  /**
   * The associated layer.
   *
   * @since 5.0
   */
  accessor layer: EditorLayerUnion;
  /**
   * Indicates when editing is enabled and is *only* due to administrative permissions. It returns `false` for *any* users if editing is generally enabled.
   *
   * @since 5.0
   */
  get reliesOnOwnerAdminPrivileges(): boolean;
  /**
   * The editing capabilities for updating features.
   *
   * @since 5.0
   */
  get update(): UpdateCapabilities;
}