import type Accessor from "../../../../core/Accessor.js";
import type MediaLayerInteractionReshapeOptions from "./MediaLayerInteractionReshapeOptions.js";
import type { MediaLayerInteractionReshapeOptionsProperties } from "./MediaLayerInteractionReshapeOptions.js";

/** @since 5.0 */
export interface MediaLayerInteractionOptionsProperties extends Partial<Pick<MediaLayerInteractionOptions, "tool">> {
  /**
   * Changes the behavior of the `reshape` tool.
   *
   * @since 5.0
   */
  reshapeOptions?: MediaLayerInteractionReshapeOptionsProperties;
}

/**
 * Options for when the media layer view is interactive in 3D.
 * Configure the interaction tool and reshape behavior for media elements.
 *
 * @since 5.0
 */
export default class MediaLayerInteractionOptions extends Accessor {
  constructor(properties?: MediaLayerInteractionOptionsProperties);
  /**
   * Changes the behavior of the `reshape` tool.
   *
   * @since 5.0
   */
  get reshapeOptions(): MediaLayerInteractionReshapeOptions;
  set reshapeOptions(value: MediaLayerInteractionReshapeOptionsProperties);
  /**
   * The type of tool to use
   *   to interact with media elements.
   *
   * Value | Description |
   * ----- | ----------- |
   * transform | The media element can be moved, scaled and rotated as a whole (**default**).
   * reshape | The four corners of the media element can be moved individually.
   *
   * @default "transform"
   * @since 5.0
   */
  accessor tool: MediaLayerInteractionTool;
}

/** @since 5.0 */
export type MediaLayerInteractionTool = "transform" | "reshape";