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

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

/**
 * Options for when the media layer view is interactive in 3D.
 * Configure the interaction tool and reshape behavior for media elements.
 */
export default abstract class MediaLayerInteractionOptions extends Accessor {
  /** Changes the behavior of the `reshape` tool. */
  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"
   */
  accessor tool: MediaLayerInteractionTool;
}

export type MediaLayerInteractionTool = "transform" | "reshape";