#include "obsw.h"

#include <filesystem>
#include <iostream>

#include "InitMission.h"
#include "OBSWConfig.h"
#include "OBSWVersion.h"
#include "fsfw/FSFWVersion.h"
#include "fsfw/tasks/TaskFactory.h"
#include "watchdogConf.h"

static int OBSW_ALREADY_RUNNING = -2;

int obsw::obsw() {
  std::cout << "-- EIVE OBSW --" << std::endl;
#if BOARD_TE0720 == 0
  std::cout << "-- Compiled for Linux (Xiphos Q7S) --" << std::endl;
#else
  std::cout << "-- Compiled for Linux (TE0720) --" << std::endl;
#endif
  std::cout << "-- OBSW v" << SW_VERSION << "." << SW_SUBVERSION << "." << SW_REVISION << ", FSFW v"
            << FSFW_VERSION << "." << FSFW_SUBVERSION << "." << FSFW_REVISION << "--" << std::endl;
  std::cout << "-- " << __DATE__ << " " << __TIME__ << " --" << std::endl;

#if Q7S_CHECK_FOR_ALREADY_RUNNING_IMG == 1
  // Check special file here. This file is created or deleted by the eive-watchdog application
  // or systemd service!
  if (std::filesystem::exists(watchdog::RUNNING_FILE_NAME)) {
    sif::warning << "File " << watchdog::RUNNING_FILE_NAME
                 << " exists so the software might "
                    "already be running. Check if obsw systemd service has been stopped."
                 << std::endl;
    return OBSW_ALREADY_RUNNING;
  }
#endif
  initmission::initMission();

  for (;;) {
    /* Suspend main thread by sleeping it. */
    TaskFactory::delayTask(5000);
  }
  return 0;
}