// 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
{% macro capitalize_first(string) -%}
{{ string[0]|capitalize + string[1:] }}
{%- endmacro %}
#pragma once

#include "frc/simulation/GenericHIDSim.h"

namespace frc {

class {{ ConsoleName }}Controller;

namespace sim {

/**
 * Class to control a simulated {{ ConsoleName }} controller.
 */
class {{ ConsoleName }}ControllerSim : public GenericHIDSim {
 public:
  /**
   * Constructs from a {{ ConsoleName }}Controller object.
   *
   * @param joystick controller to simulate
   */
  explicit {{ ConsoleName }}ControllerSim(const {{ ConsoleName }}Controller& joystick);

  /**
   * Constructs from a joystick port number.
   *
   * @param port port number
   */
  explicit {{ ConsoleName }}ControllerSim(int port);
{% for stick in sticks %}
  /**
   * Change the {{ stick.NameParts|join(" ") }} value of the controller's joystick.
   *
   * @param value the new value
   */
  void Set{{ stick.NameParts|map("capitalize")|join }}(double value);
{% endfor -%}
{% for trigger in triggers %}
  /**
   * Change the value of the {{ trigger.DocName }} axis on the controller.
   *
   * @param value the new value
   */
  void Set{{ capitalize_first(trigger.name) }}Axis(double value);
{% endfor -%}
{% for button in buttons %}
  /**
   * Change the value of the {{ button.DocName|default(button.name) }} button on the controller.
   *
   * @param value the new value
   */
  void Set{{ capitalize_first(button.name) }}Button(bool value);
{% endfor -%}
{% if ConsoleName == "Xbox" %}
  /**
   * 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);
{% elif ConsoleName == "PS4" or ConsoleName == "PS5" %}
  /**
   * Change the value of the touchpad button on the controller.
   *
   * @param value the new value
   * @deprecated Use SetTouchpadButton instead. This function is deprecated for
   * removal to make function names consistent to allow the HID classes to be
   * automatically generated.
   */
  [[deprecated("Use SetTouchpadButton instead")]]
  void SetTouchpad(bool value);
{% endif %}
};

}  // namespace sim
}  // namespace frc
