#ifndef PRODUCTION_SUSHID_SAFEPOWER_AGENT_BMC_DAEMON_CONTEXT_BMC_H_
#define PRODUCTION_SUSHID_SAFEPOWER_AGENT_BMC_DAEMON_CONTEXT_BMC_H_

#include <cstdint>

#include "bmc/persistent_storage_bmc.h"
#include "bmc/scheduler_bmc.h"
#include "daemon_context.h"
#include "persistent_storage.h"
#include "scheduler_interface.h"
#include "boost/asio/io_context.hpp"  // NOLINT(readability/boost)

namespace safepower_agent {

using boost::asio::io_context;

class DaemonContextBMC : public DaemonContext {
 public:
  DaemonContextBMC();

  SchedulerInterface& scheduler() override;
  PersistentStorageManager& persistent_storage_manager() override;
  uint64_t epoch_ms() override;
  io_context& get_io_context();

  DaemonContextBMC(DaemonContextBMC&& other) = delete;
  DaemonContextBMC& operator=(DaemonContextBMC&& other) = delete;

  // There is only one context so getter is static to enforce
  static DaemonContextBMC& Get();

 private:
  io_context io_context_;
  SchedulerBMC scheduler_;
  persistent_storage::PersistentStorageManagerBMC persistent_storage_manager_;
  uint64_t epoch_ms_;
};

}  // namespace safepower_agent

#endif  // PRODUCTION_SUSHID_SAFEPOWER_AGENT_BMC_DAEMON_CONTEXT_BMC_H_
