#ifndef ROBOT_MODEL__URDF_PARSER_HPP_
#define ROBOT_MODEL__URDF_PARSER_HPP_

#include "robot_model.hpp"
#include <string>
#include <memory>
#include <urdf/model.h>

namespace robot_model
{

class UrdfParser
{
public:
    /**
     * @brief 构造函数
     */
    UrdfParser() = default;

    /**
     * @brief 析构函数
     */
    ~UrdfParser() = default;

    /**
     * @brief 从文件解析URDF并构建RobotModel
     * @param urdf_file_path URDF文件路径
     * @return 构建的RobotModel共享指针，失败返回nullptr
     */
    std::shared_ptr<RobotModel> parse_from_file(const std::string& urdf_file_path);

    /**
     * @brief 从XML字符串解析URDF并构建RobotModel
     * @param urdf_xml URDF XML字符串
     * @return 构建的RobotModel共享指针，失败返回nullptr
     */
    std::shared_ptr<RobotModel> parse_from_string(const std::string& urdf_xml);

private:
    /**
     * @brief 解析URDF模型并构建RobotModel
     * @param model URDF模型
     * @return 构建的RobotModel共享指针
     */
    std::shared_ptr<RobotModel> build_robot_model(const urdf::Model& model);

    /**
     * @brief 解析连杆信息
     * @param link URDF连杆
     * @return 构建的Link共享指针
     */
    std::shared_ptr<Link> parse_link(const urdf::LinkConstSharedPtr& link);

    /**
     * @brief 解析关节信息
     * @param joint URDF关节
     * @return 构建的Joint共享指针
     */
    std::shared_ptr<Joint> parse_joint(const urdf::JointConstSharedPtr& joint);

    /**
     * @brief 识别关节所属部分（手臂、腿部等）
     * @param joint_name 关节名称
     * @return 关节所属部分的字符串标识
     */
    std::string identify_joint_part(const std::string& joint_name);

    /**
     * @brief 识别腿部位置（前左、前右、后左、后右）
     * @param joint_name 关节名称
     * @return 腿部位置字符串
     */
    std::string identify_leg_side(const std::string& joint_name);
};

}  // namespace robot_model

#endif  // ROBOT_MODEL__URDF_PARSER_HPP_
