#include "GpioCookie.h"

#include <fsfw/serviceinterface/ServiceInterface.h>

GpioCookie::GpioCookie() {}

ReturnValue_t GpioCookie::addGpio(gpioId_t gpioId, GpioBase* gpioConfig) {
  if (gpioConfig == nullptr) {
    sif::debug << "GpioCookie::addGpio: gpioConfig is nullpointer" << std::endl;
    return HasReturnvaluesIF::RETURN_FAILED;
  }
  auto gpioMapIter = gpioMap.find(gpioId);
  if (gpioMapIter == gpioMap.end()) {
    auto statusPair = gpioMap.emplace(gpioId, gpioConfig);
    if (statusPair.second == false) {
#if FSFW_VERBOSE_LEVEL >= 1
      sif::error << "GpioCookie::addGpio: Failed to add GPIO " << gpioId << " to GPIO map"
                 << std::endl;
#endif
      return HasReturnvaluesIF::RETURN_FAILED;
    }
    return HasReturnvaluesIF::RETURN_OK;
  }
#if FSFW_VERBOSE_LEVEL >= 1
  sif::error << "GpioCookie::addGpio: GPIO already exists in GPIO map " << std::endl;
#endif
  return HasReturnvaluesIF::RETURN_FAILED;
}

GpioMap GpioCookie::getGpioMap() const { return gpioMap; }

GpioCookie::~GpioCookie() {}