#ifndef SENSORVALUES_H_
#define SENSORVALUES_H_

#include "fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h"
#include "fsfw_hal/devicehandlers/MgmRM3100Handler.h"
#include "linux/devices/devicedefinitions/StarTrackerDefinitions.h"
#include "mission/devices/devicedefinitions/GPSDefinitions.h"
#include "mission/devices/devicedefinitions/GyroADIS1650XDefinitions.h"
#include "mission/devices/devicedefinitions/GyroL3GD20Definitions.h"
#include "mission/devices/devicedefinitions/RwDefinitions.h"
#include "mission/devices/devicedefinitions/SusDefinitions.h"
#include "mission/devices/devicedefinitions/imtqHandlerDefinitions.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();

  MGMLIS3MDL::MgmPrimaryDataset mgm0Lis3Set =
      MGMLIS3MDL::MgmPrimaryDataset(objects::MGM_0_LIS3_HANDLER);
  RM3100::Rm3100PrimaryDataset mgm1Rm3100Set =
      RM3100::Rm3100PrimaryDataset(objects::MGM_1_RM3100_HANDLER);
  MGMLIS3MDL::MgmPrimaryDataset mgm2Lis3Set =
      MGMLIS3MDL::MgmPrimaryDataset(objects::MGM_2_LIS3_HANDLER);
  RM3100::Rm3100PrimaryDataset mgm3Rm3100Set =
      RM3100::Rm3100PrimaryDataset(objects::MGM_3_RM3100_HANDLER);
  IMTQ::RawMtmMeasurementSet imtqMgmSet = IMTQ::RawMtmMeasurementSet(objects::IMTQ_HANDLER);

  std::array<SUS::SusDataset, 12> susSets{
      SUS::SusDataset(objects::SUS_0_N_LOC_XFYFZM_PT_XF),
      SUS::SusDataset(objects::SUS_1_N_LOC_XBYFZM_PT_XB),
      SUS::SusDataset(objects::SUS_2_N_LOC_XFYBZB_PT_YB),
      SUS::SusDataset(objects::SUS_3_N_LOC_XFYBZF_PT_YF),
      SUS::SusDataset(objects::SUS_4_N_LOC_XMYFZF_PT_ZF),
      SUS::SusDataset(objects::SUS_5_N_LOC_XFYMZB_PT_ZB),
      SUS::SusDataset(objects::SUS_6_R_LOC_XFYBZM_PT_XF),
      SUS::SusDataset(objects::SUS_7_R_LOC_XBYBZM_PT_XB),
      SUS::SusDataset(objects::SUS_8_R_LOC_XBYBZB_PT_YB),
      SUS::SusDataset(objects::SUS_9_R_LOC_XBYBZB_PT_YF),
      SUS::SusDataset(objects::SUS_10_N_LOC_XMYBZF_PT_ZF),
      SUS::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;

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

#endif /*ENSORVALUES_H_*/