#pragma once
// chassis_handler.hpp
// 底盘处理器。
// TCP 协议层调用本类，本类再委托给真实底盘驱动适配器。

#include "chassis_driver_adapter.hpp"
#include "data_types.hpp"

namespace vaw
{

class ChassisHandler
{
public:
    explicit ChassisHandler(ChassisDriverAdapter* adapter = nullptr)
    {
        set_driver_adapter(adapter);
    }

    virtual ~ChassisHandler() = default;

    void set_driver_adapter(ChassisDriverAdapter* adapter)
    {
        adapter_ = adapter != nullptr ? adapter : &safe_stub_;
    }

    // 查询底盘就绪状态
    // req: CHASSIS_GET_READINESS_REQ 解析结果（AgentReadinessRequest 字段）
    virtual ChassisReadinessResponse get_readiness(const nlohmann::json& req)
    {
        return adapter_->get_readiness(req);
    }

    // 执行底盘动作原语
    // req: 已解析的 MotionPrimitiveRequest
    virtual ChassisJobResult execute_motion_primitive(const MotionPrimitiveRequest& req)
    {
        return adapter_->execute_motion_primitive(req);
    }

    // 紧急制动
    // req: CHASSIS_EMERGENCY_BRAKE_REQ payload
    virtual nlohmann::json emergency_brake(const nlohmann::json& req)
    {
        const auto rsp = adapter_->emergency_brake(req);
        return nlohmann::json(rsp);
    }

private:
    SafeStubChassisDriverAdapter safe_stub_;
    ChassisDriverAdapter* adapter_{&safe_stub_};
};

}  // namespace vaw
