// 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 StadiaController;

namespace sim {

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

  /**
   * Constructs from a joystick port number.
   *
   * @param port port number
   */
  explicit StadiaControllerSim(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 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 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 value of the ellipses button on the controller.
   *
   * @param value the new value
   */
  void SetEllipsesButton(bool value);

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

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

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

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

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

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

};

}  // namespace sim
}  // namespace frc
