#pragma once
// vendor_chassis_driver_template.hpp
// 厂商底盘驱动适配模板。
// 现场对接 SDK、CAN、PLC 或运动控制器时，复制本文件并实现各个私有钩子。

#include "chassis_driver_adapter.hpp"

namespace vaw
{

class VendorChassisDriverTemplate : public ChassisDriverAdapter
{
public:
    ChassisReadinessResponse get_readiness(const nlohmann::json& req) override
    {
        (void)req;

        // 真实实现应在这里读取：
        // - SDK / CAN / PLC 连接状态
        // - 急停状态
        // - 车辆使能状态
        // - 当前是否低速标定模式
        // - 遥测链路是否可用
        ChassisReadinessResponse rsp;
        rsp.success               = false;
        rsp.error_code            = ErrorCode::NOT_READY;
        rsp.message               = "厂商底盘适配器模板尚未实现。";
        rsp.agent_ready           = true;
        rsp.chassis_driver_online = false;
        rsp.motion_control_ready  = false;
        rsp.estop_released        = false;
        rsp.vehicle_safe_to_move  = false;
        rsp.telemetry_available   = false;
        rsp.checked_timestamp_us  = unix_time_us();
        return rsp;
    }

    ChassisJobResult execute_motion_primitive(const MotionPrimitiveRequest& req) override
    {
        // 真实实现必须完成这些步骤：
        // 1. 再次检查 vehicle_id、急停、使能、低速模式和互斥任务锁。
        // 2. 把动作原语转换成真实底盘控制器可执行的命令。
        // 3. 执行过程中持续监控超时、断连、急停和驱动故障。
        // 4. 动作结束后刹停，并落盘底盘遥测和命令日志。
        // 5. 返回真实执行结果，不能用模板默认值冒充成功。
        ChassisJobResult result;
        result.success              = false;
        result.error_code           = ErrorCode::UNSUPPORTED_CAPABILITY;
        result.message              = "厂商底盘动作执行模板尚未实现。";
        result.job_id               = request_job_id(req);
        result.data_quality_passed  = false;
        result.suitable_for_commit  = false;
        result.validation_summary.auto_acceptance_passed = false;
        return result;
    }

    StandardResponse emergency_brake(const nlohmann::json& req) override
    {
        (void)req;

        // 真实实现应直接调用底盘控制器的最高优先级停车或断使能接口。
        StandardResponse rsp;
        rsp.success = false;
        rsp.error_code = ErrorCode::NOT_READY;
        rsp.message = "厂商底盘紧急制动模板尚未实现。";
        return rsp;
    }
};

}  // namespace vaw
