#include "TemperatureSensorInserter.h"

#include <objects/systemObjectList.h>

#include <cmath>
#include <cstdlib>
#include <utility>

TemperatureSensorInserter::TemperatureSensorInserter(object_id_t objectId,
                                                     Max31865DummyMap tempSensorDummies_,
                                                     Tmp1075DummyMap tempTmpSensorDummies_)
    : SystemObject(objectId),
      max31865DummyMap(std::move(tempSensorDummies_)),
      tmp1075DummyMap(std::move(tempTmpSensorDummies_)) {}

ReturnValue_t TemperatureSensorInserter::initialize() {
  if (performTest) {
    if (testCase == TestCase::COOL_SYRLINKS) {
    }
  }
  return returnvalue::OK;
}

ReturnValue_t TemperatureSensorInserter::performOperation(uint8_t opCode) {
  // TODO: deviceSensors
  if (not tempsWereInitialized) {
    for (auto& rtdDummy : max31865DummyMap) {
      rtdDummy.second->setTemperature(10, true);
    }
    for (auto& tmpDummy : tmp1075DummyMap) {
      tmpDummy.second->setTemperature(10, true);
    }
    tempsWereInitialized = true;
  }

  if (cycles == 10) {
    max31865DummyMap[objects::RTD_9_IC12_HPA]->setTemperature(-100, true);
    max31865DummyMap[objects::RTD_11_IC14_MPA]->setTemperature(-100, true);
  }

  if (cycles == 35) {
    max31865DummyMap[objects::RTD_9_IC12_HPA]->setTemperature(0, true);
    max31865DummyMap[objects::RTD_11_IC14_MPA]->setTemperature(0, true);
    max31865DummyMap[objects::RTD_2_IC5_4K_CAMERA]->setTemperature(-100, true);
  }
  if (cycles == 60) {
    max31865DummyMap[objects::RTD_9_IC12_HPA]->setTemperature(-100, true);
    max31865DummyMap[objects::RTD_11_IC14_MPA]->setTemperature(0, true);
  }

  /*
  ReturnValue_t result = max31865PlocHeatspreaderSet.read();
  if (result != returnvalue::OK) {
    sif::warning << "Failed to read temperature from MAX31865 dataset" << std::endl;
  }
  max31865PlocHeatspreaderSet.rtdValue = value - 5;
  max31865PlocHeatspreaderSet.temperatureCelcius = value;
  if ((iteration % 100) < 20) {
    max31865PlocHeatspreaderSet.setValidity(false, true);
  } else {
    max31865PlocHeatspreaderSet.setValidity(true, true);
  }
  max31865PlocHeatspreaderSet.commit();
  */
  cycles++;
  return returnvalue::OK;
}
ReturnValue_t TemperatureSensorInserter::initializeAfterTaskCreation() { return returnvalue::OK; }