#ifndef MISSION_CONTROLLER_CONTROLLERDEFINITIONS_THERMALCONTROLLERDEFINITIONS_H_
#define MISSION_CONTROLLER_CONTROLLERDEFINITIONS_THERMALCONTROLLERDEFINITIONS_H_

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

namespace thermalControllerDefinitions {

enum SetIds : uint32_t { SENSOR_TEMPERATURES, COMPONENT_TEMPERATURES };

enum PoolIds : lp_id_t { SENSOR_RW, SENSOR_GPS, COMPONENT_RW };

/**
 * @brief   This dataset can be used to store the collected temperatures of all temperature sensors
 */
class SensorTemperatures : public StaticLocalDataSet<2> {
 public:
  SensorTemperatures(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, SENSOR_TEMPERATURES) {}

  SensorTemperatures(object_id_t objectId)
      : StaticLocalDataSet(sid_t(objectId, SENSOR_TEMPERATURES)) {}

  lp_var_t<float> rw = lp_var_t<float>(sid.objectId, PoolIds::SENSOR_RW, this);
  lp_var_t<float> gps = lp_var_t<float>(sid.objectId, PoolIds::SENSOR_GPS, this);
};

/**
 * @brief   This dataset can be used to store the collected temperatures of all components
 */
class ComponentTemperatures : public StaticLocalDataSet<2> {
 public:
  ComponentTemperatures(HasLocalDataPoolIF* owner)
      : StaticLocalDataSet(owner, SENSOR_TEMPERATURES) {}

  ComponentTemperatures(object_id_t objectId)
      : StaticLocalDataSet(sid_t(objectId, SENSOR_TEMPERATURES)) {}

  lp_var_t<float> rw = lp_var_t<float>(sid.objectId, PoolIds::COMPONENT_RW, this);
};

}  // namespace thermalControllerDefinitions

#endif /* MISSION_CONTROLLER_CONTROLLERDEFINITIONS_THERMALCONTROLLERDEFINITIONS_H_ */