#include <catch2/catch_test_macros.hpp>
#include <cinttypes>

#include "fsfw/timemanager/Clock.h"

uint8_t extractSuffix(const std::string& pathStr) {
  std::string numberStr;
  // Find the position of the dot at the end of the file path
  size_t dotPos = pathStr.find_last_of('.');
  if (dotPos != std::string::npos && dotPos < pathStr.length() - 1) {
    // Extract the substring after the dot
    numberStr = pathStr.substr(dotPos + 1);
  }
  int number = std::stoi(numberStr);
  if (number < 0 or number > std::numeric_limits<uint8_t>::max()) {
    return 0;
  }
  return static_cast<uint8_t>(number);
}

TEST_CASE("Stamp in Filename", "[Stamp In Filename]") {
  Clock::TimeOfDay_t tod;
  std::string baseName = "verif";
  std::string pathStr = "verif_2022-05-25T16:55:23Z.bin";
  unsigned int underscorePos = pathStr.find_last_of('_');
  std::string stampStr = pathStr.substr(underscorePos + 1);
  float seconds = 0.0;
  char* prefix = nullptr;
  int count =
      sscanf(stampStr.c_str(),
             "%4" SCNu32 "-%2" SCNu32 "-%2" SCNu32 "T%2" SCNu32 ":%2" SCNu32 ":%2" SCNu32 "Z",
             &tod.year, &tod.month, &tod.day, &tod.hour, &tod.minute, &tod.second);
  static_cast<void>(count);
  CHECK(count == 6);
}

TEST_CASE("Suffix Extraction") {
  std::string pathStr = "/mnt/sd0/tm/hk/hk-some-stamp.bin.0";
  CHECK(extractSuffix(pathStr) == 0);
  pathStr = "/mnt/sd0/tm/hk/hk-some-stamp.bin.2";
  CHECK(extractSuffix(pathStr) == 2);
}