#ifndef __AMR_MONITOR_H_INCLUDED_
#define __AMR_MONITOR_H_INCLUDED_
#include <ros/ros.h>
#include <memory>
#include <string>
#include <nav_2d_msgs/Twist2D.h>
#include <nav_2d_utils/odom_subscriber.h>

namespace amr_control
{
  class AmrMonitor
  {
  public:
    /**
     * @brief Default constructor for AmrMonitor
     */
    AmrMonitor();

    /**
     * @brief Constructor for AmrMonitor with ROS node handle
     * @param nh ROS NodeHandle for initialization
     */
    AmrMonitor(const ros::NodeHandle& nh);

    /**
     * @brief Virtual destructor for AmrMonitor
     */
    virtual ~AmrMonitor();

    /**
     * @brief Initialize the ServerHandle with a ROS node handle
     * @param nh ROS NodeHandle for initialization
     */
    virtual void init(const ros::NodeHandle& nh);

    /**
     * @brief Get velocity 
     * @return True if get done
     */
    bool getVelocity(nav_2d_msgs::Twist2D &velocity);

  private:

    std::shared_ptr <nav_2d_utils::OdomSubscriber> odom_sub_;
    bool initalized_;
  };
} // namespace amr_control

#endif // __AMR_MONITOR_H_INCLUDED_