#include <filesystem>
#include <iostream>
#include <string>

#include "Watchdog.h"
#include "definitions.h"

/**
 * @brief   This watchdog application uses a FIFO to check whether the OBSW is still running.
 *          It checks whether the OBSW writes to the the FIFO regularly.
 */
int main() {
  std::cout << "Starting OBSW watchdog" << std::endl;
  std::error_code e;
  if (std::filesystem::exists(watchdog::RUNNING_FILE_NAME, e)) {
    std::cout << "Removing " << watchdog::RUNNING_FILE_NAME << std::endl;
    int result = std::remove(watchdog::RUNNING_FILE_NAME.c_str());
    if (result != 0) {
      std::cerr << "file removal failure" << std::endl;
    }
  }
  try {
    WatchdogTask watchdogTask;
    int result = watchdogTask.performOperation();
    if (result != 0) {
      return result;
    }
  } catch (const std::runtime_error& e) {
    std::cerr << "Run time exception " << e.what() << std::endl;
    return -1;
  }
  return 0;
}