#pragma once
#include <Arduino.h>
#include <Arduino_BMI270_BMM150.h>
#include "filters.h"

#define IMU_FIFO_SIZE 128
#define IMU_TIMER_US  11111   // 90 Hz optimized

class PhiIMU {
public:
    PhiIMU();
    bool begin();
    void update();
    
    bool readyForFFT() const;
    const float* getFFTBuffer() const;
    
    float ax() const { return _ax_raw; }
    float ay() const { return _ay_raw; }
    float az() const { return _az_raw; }
    
    float magnitudeRaw() const { return _mag_raw; }
    float magnitudeFiltered() const { return _mag_filtered; }

private:
    float _buffer[IMU_FIFO_SIZE];
    uint16_t _index;
    
    float _ax_raw, _ay_raw, _az_raw;
    float _mag_raw;
    float _mag_filtered;
    
    HighPass _hpfX;
    HighPass _hpfY;
    HighPass _hpfZ;
    
    uint32_t _nextSample_us;
    uint32_t _lastSample_us;
    
    bool _bufferReady;
};