#include "StarTrackerDummy.h"

#include <mission/acs/str/strHelpers.h>

StarTrackerDummy::StarTrackerDummy(object_id_t objectId, object_id_t comif, CookieIF *comCookie)
    : DeviceHandlerBase(objectId, comif, comCookie) {}

StarTrackerDummy::~StarTrackerDummy() {}

void StarTrackerDummy::doStartUp() { setMode(MODE_ON); }

void StarTrackerDummy::doShutDown() { setMode(_MODE_POWER_DOWN); }

ReturnValue_t StarTrackerDummy::buildNormalDeviceCommand(DeviceCommandId_t *id) {
  return NOTHING_TO_SEND;
}

ReturnValue_t StarTrackerDummy::buildTransitionDeviceCommand(DeviceCommandId_t *id) {
  return NOTHING_TO_SEND;
}

ReturnValue_t StarTrackerDummy::buildCommandFromCommand(DeviceCommandId_t deviceCommand,
                                                        const uint8_t *commandData,
                                                        size_t commandDataLen) {
  return returnvalue::OK;
}

ReturnValue_t StarTrackerDummy::scanForReply(const uint8_t *start, size_t len,
                                             DeviceCommandId_t *foundId, size_t *foundLen) {
  return returnvalue::OK;
}

ReturnValue_t StarTrackerDummy::interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) {
  return returnvalue::OK;
}

void StarTrackerDummy::fillCommandAndReplyMap() {}

uint32_t StarTrackerDummy::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { return 500; }

ReturnValue_t StarTrackerDummy::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
                                                        LocalDataPoolManager &poolManager) {
  localDataPoolMap.emplace(startracker::MCU_TEMPERATURE, new PoolEntry<float>({10.0}, true));

  localDataPoolMap.emplace(startracker::TICKS_SOLUTION_SET, new PoolEntry<uint32_t>({0}));
  localDataPoolMap.emplace(startracker::TIME_SOLUTION_SET, new PoolEntry<uint64_t>({0}));
  localDataPoolMap.emplace(startracker::CALI_QW, new PoolEntry<float>({1.0}, true));
  localDataPoolMap.emplace(startracker::CALI_QX, new PoolEntry<float>({0.0}, true));
  localDataPoolMap.emplace(startracker::CALI_QY, new PoolEntry<float>({0.0}, true));
  localDataPoolMap.emplace(startracker::CALI_QZ, new PoolEntry<float>({0.0}, true));
  localDataPoolMap.emplace(startracker::TRACK_CONFIDENCE, new PoolEntry<float>({0.0}));
  localDataPoolMap.emplace(startracker::TRACK_QW, new PoolEntry<float>({1.0}));
  localDataPoolMap.emplace(startracker::TRACK_QX, new PoolEntry<float>({0.0}));
  localDataPoolMap.emplace(startracker::TRACK_QY, new PoolEntry<float>({0.0}));
  localDataPoolMap.emplace(startracker::TRACK_QZ, new PoolEntry<float>({0.0}));
  localDataPoolMap.emplace(startracker::TRACK_REMOVED, new PoolEntry<uint8_t>({0}));
  localDataPoolMap.emplace(startracker::STARS_CENTROIDED, new PoolEntry<uint8_t>({0}));
  localDataPoolMap.emplace(startracker::STARS_MATCHED_DATABASE, new PoolEntry<uint8_t>({0}));
  localDataPoolMap.emplace(startracker::LISA_QW, new PoolEntry<float>({1.0}));
  localDataPoolMap.emplace(startracker::LISA_QX, new PoolEntry<float>({0.0}));
  localDataPoolMap.emplace(startracker::LISA_QY, new PoolEntry<float>({0.0}));
  localDataPoolMap.emplace(startracker::LISA_QZ, new PoolEntry<float>({0.0}));
  localDataPoolMap.emplace(startracker::LISA_PERC_CLOSE, new PoolEntry<float>({0.0}));
  localDataPoolMap.emplace(startracker::LISA_NR_CLOSE, new PoolEntry<uint8_t>({0}));
  localDataPoolMap.emplace(startracker::TRUST_WORTHY, new PoolEntry<uint8_t>({0}));
  localDataPoolMap.emplace(startracker::STABLE_COUNT, new PoolEntry<uint32_t>({0}));
  localDataPoolMap.emplace(startracker::STR_MODE, new PoolEntry<uint8_t>({0}));
  localDataPoolMap.emplace(startracker::SOLUTION_STRATEGY, new PoolEntry<uint8_t>({0}));
  return returnvalue::OK;
}