#include "headerFile.h"

SensorManager::Rotation offset;

void setup() {
  Serial.begin(9600);
  Serial.println("startup");
  delay(5000);
  
  connectivity.connectWiFi(ssid, pass);
  sensorManager.sensorSetup();
  connectivity.websocketSetup();
}

void loop() {
  SensorManager::Rotation rotation = sensorManager.readLoop();

  // Subtract offset
  rotation.i -= offset.i;
  rotation.j -= offset.j;
  rotation.k -= offset.k;
  rotation.w -= offset.w;

  // Convert quaternion to Euler angles in radians
  float roll = atan2(2.0f * (rotation.w * rotation.i + rotation.j * rotation.k), 1.0f - 2.0f * (rotation.i * rotation.i + rotation.j * rotation.j));
  float pitch = asin(2.0f * (rotation.w * rotation.j - rotation.k * rotation.i));
  float yaw = atan2(2.0f * (rotation.w * rotation.k + rotation.i * rotation.j), 1.0f - 2.0f * (rotation.j * rotation.j + rotation.k * rotation.k));

  // Convert to degrees
  float rollDegrees = roll * 180.0f / PI;
  float pitchDegrees = pitch * 180.0f / PI;
  float yawDegrees = yaw * 180.0f / PI;

  Serial.print(roll);
  Serial.print(" ");
  Serial.print(pitch);
  Serial.print(" ");
  Serial.print(yaw);
  connectivity.sendData(roll, pitch, yaw);

  Serial.println();
  webSocket.loop();

  if (Serial.available()) {
    String command = Serial.readStringUntil('\n');
    command.trim(); // remove any trailing whitespace
    if (command == "setZeroPoint") {
      setZeroPoint();
    }
  }
}
void setZeroPoint() {
  offset = sensorManager.readLoop();
}
