#ifndef MISSION_CONTROLLER_ACS_FUSEDROTATIONESTIMATION_H_
#define MISSION_CONTROLLER_ACS_FUSEDROTATIONESTIMATION_H_

#include <fsfw/datapool/PoolReadGuard.h>
#include <fsfw/globalfunctions/math/VectorOperations.h>
#include <mission/controller/acs/AcsParameters.h>
#include <mission/controller/controllerdefinitions/AcsCtrlDefinitions.h>

class FusedRotationEstimation {
 public:
  FusedRotationEstimation(AcsParameters *acsParameters_);

  void estimateFusedRotationRateSafe(acsctrl::SusDataProcessed *susDataProcessed,
                                     acsctrl::MgmDataProcessed *mgmDataProcessed,
                                     acsctrl::GyrDataProcessed *gyrDataProcessed,
                                     acsctrl::FusedRotRateData *fusedRotRateData);

 protected:
 private:
  static constexpr double ZERO_VEC[3] = {0, 0, 0};

  AcsParameters *acsParameters;
  double rotRateOldB[3] = {0, 0, 0};

  void estimateFusedRotationRateEclipse(acsctrl::GyrDataProcessed *gyrDataProcessed,
                                        acsctrl::FusedRotRateData *fusedRotRateData);
};

#endif /* MISSION_CONTROLLER_ACS_FUSEDROTATIONESTIMATION_H_ */