import type Input from "./Input.js";
import type { InputMethod } from "../../../../portal/jsonTypes.js";

/** @experimental */
export interface VideoInputProperties extends Partial<Pick<VideoInput, "inputMethod" | "maxDuration">> {}

/**
 * The `VideoInput` class defines a user interface for an input to which a video file can be attached. This [AttachmentElement#input](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-AttachmentElement.html#input) is used in [attachment elements](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-AttachmentElement.html) that are set within a [feature layer's](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html#formTemplate) or [FeatureForm's](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FeatureForm.html#formTemplate) `formTemplate`. This is displayed within the [Editor](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Editor.html) widget.
 *
 * > [!CAUTION]
 * >
 * > This class is not yet fully supported within the SDK and is not intended for use in development. Support will be added in an upcoming release.
 *
 * @experimental
 * @since 4.31
 * @see [VideoInput](https://developers.arcgis.com/javascript/latest/api-reference/esri-form-elements-inputs-attachments-VideoInput.html)
 * @example
 * // Creates a new VideoInput for an attachment element within a form
 * const videoInput = new VideoInput({
 *   inputMethod: "upload",
 *   maxDuration: 90
 * });
 */
export default class VideoInput extends Input {
  /** @experimental */
  constructor(properties?: VideoInputProperties);
  /**
   * The supported input methods used to attach a video.
   *
   * @default "any"
   * @experimental
   */
  accessor inputMethod: InputMethod;
  /**
   * Defines the maximum length of an attachment for this element in seconds. If not specified, there is no maximum length.
   *
   * @experimental
   */
  accessor maxDuration: number | null | undefined;
  /**
   * The input type identifier. Valid value of this property is "video"
   *
   * @default "video"
   * @experimental
   */
  get type(): "video";
}