#ifndef SENSORVALUES_H_
#define SENSORVALUES_H_

#include <fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h>
#include <fsfw_hal/devicehandlers/MgmRM3100Handler.h>
#include <fsfw_hal/devicehandlers/devicedefinitions/gyroL3gHelpers.h>
#include <mission/acs/archive/GPSDefinitions.h>
#include <mission/acs/gyroAdisHelpers.h>
#include <mission/acs/imtqHelpers.h>
#include <mission/acs/rwHelpers.h>
#include <mission/acs/str/strHelpers.h>
#include <mission/acs/susMax1227Helpers.h>

namespace ACS {

class SensorValues {
 public:
  SensorValues();
  virtual ~SensorValues();

  ReturnValue_t update();
  ReturnValue_t updateMgm();
  ReturnValue_t updateSus();
  ReturnValue_t updateGyr();
  ReturnValue_t updateGps();
  ReturnValue_t updateStr();
  ReturnValue_t updateRw();

  mgmLis3::MgmPrimaryDataset mgm0Lis3Set = mgmLis3::MgmPrimaryDataset(objects::MGM_0_LIS3_HANDLER);
  mgmRm3100::Rm3100PrimaryDataset mgm1Rm3100Set =
      mgmRm3100::Rm3100PrimaryDataset(objects::MGM_1_RM3100_HANDLER);
  mgmLis3::MgmPrimaryDataset mgm2Lis3Set = mgmLis3::MgmPrimaryDataset(objects::MGM_2_LIS3_HANDLER);
  mgmRm3100::Rm3100PrimaryDataset mgm3Rm3100Set =
      mgmRm3100::Rm3100PrimaryDataset(objects::MGM_3_RM3100_HANDLER);
  imtq::RawMtmMeasurementNoTorque imtqMgmSet =
      imtq::RawMtmMeasurementNoTorque(objects::IMTQ_HANDLER);

  std::array<susMax1227::SusDataset, 12> susSets{
      susMax1227::SusDataset(objects::SUS_0_N_LOC_XFYFZM_PT_XF),
      susMax1227::SusDataset(objects::SUS_1_N_LOC_XBYFZM_PT_XB),
      susMax1227::SusDataset(objects::SUS_2_N_LOC_XFYBZB_PT_YB),
      susMax1227::SusDataset(objects::SUS_3_N_LOC_XFYBZF_PT_YF),
      susMax1227::SusDataset(objects::SUS_4_N_LOC_XMYFZF_PT_ZF),
      susMax1227::SusDataset(objects::SUS_5_N_LOC_XFYMZB_PT_ZB),
      susMax1227::SusDataset(objects::SUS_6_R_LOC_XFYBZM_PT_XF),
      susMax1227::SusDataset(objects::SUS_7_R_LOC_XBYBZM_PT_XB),
      susMax1227::SusDataset(objects::SUS_8_R_LOC_XBYBZB_PT_YB),
      susMax1227::SusDataset(objects::SUS_9_R_LOC_XBYBZB_PT_YF),
      susMax1227::SusDataset(objects::SUS_10_N_LOC_XMYBZF_PT_ZF),
      susMax1227::SusDataset(objects::SUS_11_R_LOC_XBYMZB_PT_ZB),
  };

  AdisGyroPrimaryDataset gyr0AdisSet = AdisGyroPrimaryDataset(objects::GYRO_0_ADIS_HANDLER);
  GyroPrimaryDataset gyr1L3gSet = GyroPrimaryDataset(objects::GYRO_1_L3G_HANDLER);
  AdisGyroPrimaryDataset gyr2AdisSet = AdisGyroPrimaryDataset(objects::GYRO_2_ADIS_HANDLER);
  GyroPrimaryDataset gyr3L3gSet = GyroPrimaryDataset(objects::GYRO_3_L3G_HANDLER);

  startracker::SolutionSet strSet = startracker::SolutionSet(objects::STAR_TRACKER);

  GpsPrimaryDataset gpsSet = GpsPrimaryDataset(objects::GPS_CONTROLLER);

  //  bool mgt0valid;

  rws::StatusSet rw1Set = rws::StatusSet(objects::RW1);
  rws::StatusSet rw2Set = rws::StatusSet(objects::RW2);
  rws::StatusSet rw3Set = rws::StatusSet(objects::RW3);
  rws::StatusSet rw4Set = rws::StatusSet(objects::RW4);
};
} /* namespace ACS */

#endif /*ENSORVALUES_H_*/