#include "comCfg.h"

#include <fsfw/ipc/MutexFactory.h>
#include <fsfw/ipc/MutexGuard.h>

#include <atomic>

com::Datarate DATARATE_CFG_RAW = com::Datarate::LOW_RATE_MODULATION_BPSK;
MutexIF* DATARATE_LOCK = nullptr;

MutexIF* lazyLock();

com::Datarate com::getCurrentDatarate() {
  MutexGuard mg(lazyLock(), MutexIF::TimeoutType::WAITING, 20, "com");
  return DATARATE_CFG_RAW;
}

void com::setCurrentDatarate(com::Datarate newRate) {
  MutexGuard mg(lazyLock(), MutexIF::TimeoutType::WAITING, 20, "com");
  DATARATE_CFG_RAW = newRate;
}

MutexIF* lazyLock() {
  if (DATARATE_LOCK == nullptr) {
    return MutexFactory::instance()->createMutex();
  }
  return DATARATE_LOCK;
}