// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.

// THIS FILE WAS AUTO-GENERATED BY ./wpilibc/generate_hids.py. DO NOT MODIFY

#pragma once

#include "wpi/simulation/GenericHIDSim.hpp"

namespace wpi {

class NiDsPS4Controller;

namespace sim {

/**
 * Class to control a simulated NiDsPS4 controller.
 */
class NiDsPS4ControllerSim : public GenericHIDSim {
 public:
  /**
   * Constructs from a NiDsPS4Controller object.
   *
   * @param joystick controller to simulate
   */
  explicit NiDsPS4ControllerSim(const NiDsPS4Controller& joystick);

  /**
   * Constructs from a joystick port number.
   *
   * @param port port number
   */
  explicit NiDsPS4ControllerSim(int port);

  /**
   * Change the left X value of the controller's joystick.
   *
   * @param value the new value
   */
  void SetLeftX(double value);

  /**
   * Change the left Y value of the controller's joystick.
   *
   * @param value the new value
   */
  void SetLeftY(double value);

  /**
   * Change the right X value of the controller's joystick.
   *
   * @param value the new value
   */
  void SetRightX(double value);

  /**
   * Change the right Y value of the controller's joystick.
   *
   * @param value the new value
   */
  void SetRightY(double value);

  /**
   * Change the value of the left trigger 2 axis on the controller.
   *
   * @param value the new value
   */
  void SetL2Axis(double value);

  /**
   * Change the value of the right trigger 2 axis on the controller.
   *
   * @param value the new value
   */
  void SetR2Axis(double value);

  /**
   * Change the value of the square button on the controller.
   *
   * @param value the new value
   */
  void SetSquareButton(bool value);

  /**
   * Change the value of the cross button on the controller.
   *
   * @param value the new value
   */
  void SetCrossButton(bool value);

  /**
   * Change the value of the circle button on the controller.
   *
   * @param value the new value
   */
  void SetCircleButton(bool value);

  /**
   * Change the value of the triangle button on the controller.
   *
   * @param value the new value
   */
  void SetTriangleButton(bool value);

  /**
   * Change the value of the left trigger 1 button on the controller.
   *
   * @param value the new value
   */
  void SetL1Button(bool value);

  /**
   * Change the value of the right trigger 1 button on the controller.
   *
   * @param value the new value
   */
  void SetR1Button(bool value);

  /**
   * Change the value of the left trigger 2 button on the controller.
   *
   * @param value the new value
   */
  void SetL2Button(bool value);

  /**
   * Change the value of the right trigger 2 button on the controller.
   *
   * @param value the new value
   */
  void SetR2Button(bool value);

  /**
   * Change the value of the share button on the controller.
   *
   * @param value the new value
   */
  void SetShareButton(bool value);

  /**
   * Change the value of the options button on the controller.
   *
   * @param value the new value
   */
  void SetOptionsButton(bool value);

  /**
   * Change the value of the L3 (left stick) button on the controller.
   *
   * @param value the new value
   */
  void SetL3Button(bool value);

  /**
   * Change the value of the R3 (right stick) button on the controller.
   *
   * @param value the new value
   */
  void SetR3Button(bool value);

  /**
   * Change the value of the PlayStation button on the controller.
   *
   * @param value the new value
   */
  void SetPSButton(bool value);

  /**
   * Change the value of the touchpad button on the controller.
   *
   * @param value the new value
   */
  void SetTouchpadButton(bool value);
};

}  // namespace sim
}  // namespace wpi
