#ifndef OMNI_NODE_HPP_
#define OMNI_NODE_HPP_

#include <memory>
#include <string>

#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>

#include "omni_node/omni_engine.hpp"

namespace omni_node {

class OmniNode : public rclcpp::Node {
public:
  explicit OmniNode(rclcpp::NodeOptions options);
  ~OmniNode() override;

private:
  void OnAsrReceived(const std_msgs::msg::String::SharedPtr msg);
  void OnPlannerLlmRequestReceived(const std_msgs::msg::String::SharedPtr msg);

  std::unique_ptr<OmniEngine> engine_;
  rclcpp::Subscription<std_msgs::msg::String>::SharedPtr sub_asr_;
  rclcpp::Subscription<std_msgs::msg::String>::SharedPtr sub_planner_request_;
  rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub_response_;
  rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub_planner_response_;
  bool engine_initialized_;

  bool enable_legacy_asr_mode_;
  bool enable_planner_mode_;
};

}  // namespace omni_node

#endif  // OMNI_NODE_HPP_

