#ifndef MISSION_CONTROLLER_CONTROLLERDEFINITIONS_ACSCTRLDEFINITIONS_H_
#define MISSION_CONTROLLER_CONTROLLERDEFINITIONS_ACSCTRLDEFINITIONS_H_

#include <fsfw/datapoollocal/StaticLocalDataSet.h>
#include <fsfw/datapoollocal/localPoolDefinitions.h>

#include <cstdint>

namespace acsctrl {

enum SetIds : uint32_t { MGM_SENSOR_DATA, SUS_SENSOR_DATA };

enum PoolIds : lp_id_t {
  MGM_0_LIS3_UT,
  MGM_1_RM3100_UT,
  MGM_2_LIS3_UT,
  MGM_3_RM3100_UT,
  MGM_IMTQ_CAL_NT,
  MGM_IMTQ_CAL_ACT_STATUS,

  SUS_0_N_LOC_XFYFZM_PT_XF,
  SUS_6_R_LOC_XFYBZM_PT_XF,

  SUS_1_N_LOC_XBYFZM_PT_XB,
  SUS_7_R_LOC_XBYBZM_PT_XB,

  SUS_2_N_LOC_XFYBZB_PT_YB,
  SUS_8_R_LOC_XBYBZB_PT_YB,

  SUS_3_N_LOC_XFYBZF_PT_YF,
  SUS_9_R_LOC_XBYBZB_PT_YF,

  SUS_4_N_LOC_XMYFZF_PT_ZF,
  SUS_10_N_LOC_XMYBZF_PT_ZF,

  SUS_5_N_LOC_XFYMZB_PT_ZB,
  SUS_11_R_LOC_XBYMZB_PT_ZB,
};

static constexpr uint8_t MGM_SET_ENTRIES = 10;
static constexpr uint8_t SUS_SET_ENTRIES = 12;

/**
 * @brief   Raw MGM sensor data. Includes the IMTQ sensor data and actuator status.
 */
class MgmDataRaw : public StaticLocalDataSet<MGM_SET_ENTRIES> {
 public:
  MgmDataRaw(HasLocalDataPoolIF* hkOwner) : StaticLocalDataSet(hkOwner, MGM_SENSOR_DATA) {}

  // The ACS board measurement are in floating point uT
  lp_vec_t<float, 3> mgm0Lis3 = lp_vec_t<float, 3>(sid.objectId, MGM_0_LIS3_UT, this);
  lp_vec_t<float, 3> mgm1Rm3100 = lp_vec_t<float, 3>(sid.objectId, MGM_1_RM3100_UT, this);
  lp_vec_t<float, 3> mgm2Lis3 = lp_vec_t<float, 3>(sid.objectId, MGM_2_LIS3_UT, this);
  lp_vec_t<float, 3> mgm3Rm3100 = lp_vec_t<float, 3>(sid.objectId, MGM_3_RM3100_UT, this);
  // The IMTQ measurements are in integer nT
  lp_vec_t<float, 3> imtqRaw = lp_vec_t<float, 3>(sid.objectId, MGM_IMTQ_CAL_NT, this);
  lp_var_t<uint8_t> actuationCalStatus =
      lp_var_t<uint8_t>(sid.objectId, MGM_IMTQ_CAL_ACT_STATUS, this);

 private:
};

class SusData : public StaticLocalDataSet<SUS_SET_ENTRIES> {
 public:
  SusData(HasLocalDataPoolIF* hkOwner) : StaticLocalDataSet(hkOwner, SUS_SENSOR_DATA) {}

 private:
};

}  // namespace acsctrl

#endif /* MISSION_CONTROLLER_CONTROLLERDEFINITIONS_ACSCTRLDEFINITIONS_H_ */