import type Accessor from "../../../core/Accessor.js";

export interface GamepadInputDeviceProperties {}

/**
 * Properties and configuration of a gamepad.
 *
 * Two types of devices are currently supported: [Standard Gamepads](https://www.w3.org/TR/gamepad/#remapping)
 * and [3Dconnexion devices](https://en.wikipedia.org/wiki/3Dconnexion).
 *
 * A standard gamepad will have standardized [mappings](https://www.w3.org/TR/gamepad/#remapping) for buttons and
 * axes, like the [XBox360 controller](https://en.wikipedia.org/wiki/Xbox_360_controller) and the
 * [DualShock 4 controller](https://en.wikipedia.org/wiki/DualShock#DualShock_4) (PlayStation 4 controller).
 * To find out more information about your device and test its connection with certain browsers, please refer to
 * the [HTML5 Gamepad Tester](https://html5gamepad.com/).
 *
 * The W3C standard for [Gamepad](https://www.w3.org/TR/gamepad) is still in draft status. As such, support is
 * limited to a subset of browsers and operating systems. We have not tested every browser/OS combination but as
 * a general guide we have experienced reliable results with the following pairings:
 *
 * | Browser | Windows | macOS |
 * |:---|:---|:---|
 * | Chrome | XBox360 <br/> XBox One <br/> 3DConnexion Devices <br/> PS4 Controller | XBox360 <br/> XBox One <br/> 3DConnexion Devices <br/> PS4 Controller |
 * | Firefox| XBox360 <br/> XBox One | No gamepad devices support this browser/OS combination |
 * | Edge(17 and above) | XBox360 <br/> XBox One | This browser is not supported on this OS |
 * | Safari | This browser is not supported on this OS | No gamepad devices support this browser/OS combination |
 *
 * > [!WARNING]
 * >
 * > **Notes:**
 * > You might need to restart your browser after connecting a device.
 * > Per [W3C Working Draft 29 October 2020](https://www.w3.org/TR/2020/WD-gamepad-20201029/),
 * > gamepad functionality may not be available on some or all browsers if the web application is hosted on a
 * > [non-secure context](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts) (e.g. http rather than https).
 * > Future versions of the ArcGIS Maps SDK for JavaScript may explicitly disable gamepad capabilities on non-secure contexts.
 *
 * @since 4.9
 * @see [View.input.gamepad.devices](https://developers.arcgis.com/javascript/latest/references/core/views/input/gamepad/GamepadSettings/#devices) for a collection of detected gamepads.
 */
export default class GamepadInputDevice extends Accessor {
  constructor(properties: GamepadInputDeviceProperties);
  /** The native Gamepad object exposed by the browser. */
  get native(): Gamepad | null | undefined;
}