#ifndef PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_DAEMON_CONTEXT_H_
#define PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_DAEMON_CONTEXT_H_

#include <cstdint>
#include <utility>

#include "disruption_manager.h"
#include "persistent_storage.h"
#include "safepower_agent_config.pb.h"
#include "scheduler_interface.h"
#include "absl/base/nullability.h"
#include "absl/time/clock.h"
#include "absl/time/time.h"

namespace safepower_agent {

class DaemonContext {
 public:
  DaemonContext();
  virtual ~DaemonContext();

  static DaemonContext& Get();

  virtual absl::Time now() const { return absl::Now(); }

  virtual uint64_t epoch_ms() = 0;
  virtual SchedulerInterface& scheduler() = 0;
  virtual PersistentStorageManager& persistent_storage_manager() = 0;

  const safepower_agent_config::SafePowerAgentConfig& config() const {
    return config_;
  }

  void set_config(safepower_agent_config::SafePowerAgentConfig config) {
    config_ = std::move(config);
  }

  DisruptionManager& disruption_manager() { return disruption_manager_; }

 private:
  static DaemonContext*  instance_;
  safepower_agent_config::SafePowerAgentConfig config_;

  DisruptionManager disruption_manager_;
};
}  // namespace safepower_agent

#endif  // PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_DAEMON_CONTEXT_H_
