#ifndef ARM_DRIVER_DEFINE_HPP
#define ARM_DRIVER_DEFINE_HPP

#include "rm_arm_driver.hpp"
#include "rm_driver_kinematics.hpp"
#include "trajectory.hpp"

int InitRmDriver2(RmArmDriverAndKinematics **armDriver, RmArmDriverAndKinematics **armKinematics);
int InitSimulatorDriver(ArmDriverDefault **armDriver, TrapezoidalTrajectoryKinematics **armKinematics);
int InitRmArmDriver(ArmDriverDefault **armDriver, TrapezoidalTrajectoryKinematics **armKinematics);

#ifdef REAL_ROBOT
using ArmDriver = RmArmDriverAndKinematics;

using KinematicsManager = TrajectoryManager<NodataTrajectory, RmArmDriverAndKinematics>;
using Trajectory = NodataTrajectory;
using Kinematics = RmArmDriverAndKinematics;

#define ArmInitFunc InitRmDriver2
#else
using ArmDriver = ArmDriverDefault;

using KinematicsManager = TrajectoryManager<TrapezoidalTrajectory, TrapezoidalTrajectoryKinematics>;
using Trajectory = TrapezoidalTrajectory;
using Kinematics = TrapezoidalTrajectoryKinematics;

#define ArmInitFunc InitSimulatorDriver
#endif

#endif // ARM_DRIVER_DEFINE_HPP