#pragma once

#include "boot_manager.hpp"
#include "utils.hpp"

#include <sdbusplus/asio/object_server.hpp>
#include <sdbusplus/bus/match.hpp>
#include <xyz/openbmc_project/Time/Boot/Checkpoint/server.hpp>
#include <xyz/openbmc_project/Time/Boot/Duration/server.hpp>
#include <xyz/openbmc_project/Time/Boot/Statistic/server.hpp>

#include <cstdint>
#include <memory>
#include <string>

namespace boot_time_monitor
{

class DbusHandler :
    sdbusplus::server::object::object<
        sdbusplus::xyz::openbmc_project::Time::Boot::server::Duration>,
    sdbusplus::server::object::object<
        sdbusplus::xyz::openbmc_project::Time::Boot::server::Checkpoint>,
    sdbusplus::server::object::object<
        sdbusplus::xyz::openbmc_project::Time::Boot::server::Statistic>
{
  public:
    DbusHandler(sdbusplus::bus::bus& dbus, const std::string& objPath,
                std::shared_ptr<BootManagerIface> bootManager,
                std::shared_ptr<UtilIface> util);

    void setCheckpoint(std::string checkpointName, int64_t wallTime,
                       int64_t selfMeasuredDuration) override;
    std::vector<std::tuple<std::string, int64_t, int64_t>>
        getCheckpointList() override;
    void rebootComplete() override;
    void setDuration(std::string durationName, int64_t duration) override;
    std::vector<std::tuple<std::string, int64_t>>
        getAdditionalDurations() override;
    bool isRebooting() const override;

  private:
    std::shared_ptr<BootManagerIface> bootManager;
    std::shared_ptr<UtilIface> util;
};

} // namespace boot_time_monitor
