// 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 "frc/simulation/GenericHIDSim.h"

namespace frc {

class XboxController;

namespace sim {

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

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

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

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

  /**
   * Change the left Y value of the controller's joystick.
   *
   * @param value the new value
   */
  void SetLeftY(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 axis on the controller.
   *
   * @param value the new value
   */
  void SetLeftTriggerAxis(double value);

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

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

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

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

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

  /**
   * Change the value of the left bumper button on the controller.
   *
   * @param value the new value
   */
  void SetLeftBumperButton(bool value);

  /**
   * Change the value of the right bumper button on the controller.
   *
   * @param value the new value
   */
  void SetRightBumperButton(bool value);

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

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

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

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

  /**
   * Change the left bumper value of the joystick.
   *
   * @param value the new value
   * @deprecated Use SetLeftBumperButton instead. This function is deprecated
   * for removal to make function names consistent to allow the HID classes to
   * be automatically generated.
   */
  [[deprecated("Use SetLeftBumperButton instead")]]
  void SetLeftBumper(bool value);

  /**
   * Change the right bumper value of the joystick.
   *
   * @param value the new value
   * @deprecated Use SetRightBumperButton instead. This function is deprecated
   * for removal to make function names consistent to allow the HID classes to
   * be automatically generated.
   */
  [[deprecated("Use SetRightBumperButton instead")]]
  void SetRightBumper(bool value);

};

}  // namespace sim
}  // namespace frc
