#ifdef ATM_TEENSTEP_OSC_H

#include "Atm_Teenstep_OSC.h"

Atm_Teenstep_OSC& Atm_Teenstep_OSC::begin(Atm_Teenstep& stepperMachineRef, EthernetUDP& udpRef, OSCBundle& bndl, const char* address) {
  this-> stepperMachine = &stepperMachineRef;
  _adress = address;
  this->_udpRef =   &udpRef;
  this->_bndl = &bndl ;
  //stepperMachine->onChangeposition( sendPosition, 0);
  return *this;
}



Atm_Teenstep_OSC& Atm_Teenstep_OSC::onOSC(OSCMessage& msg ){
  Serial.println("OSC");
  int patternOffset = msg.match(_adress) ;
  if(patternOffset){
    if(msg.fullMatch("/speedAcc", patternOffset)){
      stepperMachine->motor->setMaxSpeed(msg.getInt(0));
      stepperMachine->motor->setAcceleration(msg.getInt(1));
    }
    if(msg.fullMatch("/enable", patternOffset)){msg.getInt(0) ? stepperMachine->trigger(stepperMachine->EVT_ENABLE) : stepperMachine->trigger(stepperMachine->EVT_DISABLE);}
    //if(msg.fullMatch("/home", patternOffset)){home(msg.getInt(0));}
    if(msg.fullMatch("/move", patternOffset)){stepperMachine->move(msg.getInt(0));Serial.println(msg.getInt(0));}
    if(msg.fullMatch("/moveTo", patternOffset)){stepperMachine->moveTo(msg.getInt(0));}
    if(msg.fullMatch("/stop", patternOffset)){stepperMachine->stop();}
    if(msg.fullMatch("/emergencyStop", patternOffset)){stepperMachine->emergencystop();}
    if(msg.fullMatch("/home", patternOffset)){stepperMachine->homing(msg.getInt(0));}

    return *this;
  }
}

void Atm_Teenstep_OSC::sendPosition(int idx, int v, int up) {
  _bndl->add(_adress).add(v);
}

#endif