#include "FilesystemHelper.h"

#include <filesystem>
#include <fstream>

#include "bsp_q7s/memory/SdCardManager.h"
#include "fsfw/serviceinterface/ServiceInterfaceStream.h"

FilesystemHelper::FilesystemHelper() {}

ReturnValue_t FilesystemHelper::checkPath(std::string path) {
  SdCardManager* sdcMan = SdCardManager::instance();
  if (sdcMan == nullptr) {
    sif::warning << "FilesystemHelper::checkPath: Invalid SD card manager" << std::endl;
    return RETURN_FAILED;
  }
  if (path.substr(0, sizeof(SdCardManager::SD_0_MOUNT_POINT)) ==
      std::string(SdCardManager::SD_0_MOUNT_POINT)) {
    if (!sdcMan->isSdCardMounted(sd::SLOT_0)) {
      sif::warning << "FilesystemHelper::checkPath: SD card 0 not mounted" << std::endl;
      return SD_NOT_MOUNTED;
    }
  } else if (path.substr(0, sizeof(SdCardManager::SD_1_MOUNT_POINT)) ==
             std::string(SdCardManager::SD_1_MOUNT_POINT)) {
    if (!sdcMan->isSdCardMounted(sd::SLOT_0)) {
      sif::warning << "FilesystemHelper::checkPath: SD card 1 not mounted" << std::endl;
      return SD_NOT_MOUNTED;
    }
  }
  return RETURN_OK;
}

ReturnValue_t FilesystemHelper::fileExists(std::string file) {
  if (not std::filesystem::exists(file)) {
    return FILE_NOT_EXISTS;
  }
  return RETURN_OK;
}