#pragma once

#include "config.h"

#include "bmc_time_change_listener.hpp"
#include "epoch_base.hpp"

#include <chrono>

namespace phosphor
{
namespace time
{

/** @class HostEpoch
 *  @brief OpenBMC HOST EpochTime implementation.
 *  @details A concrete implementation for xyz.openbmc_project.Time.EpochTime
 *  DBus API for HOST's epoch time.
 */
class HostEpoch : public EpochBase, public BmcTimeChangeListener
{
  public:
    friend class TestHostEpoch;
    HostEpoch(sdbusplus::bus::bus& bus, const char* objPath);

    /**
     * @brief Get value of Elapsed property
     *
     * @return The elapsed microseconds since UTC
     **/
    uint64_t elapsed() const override;

    /**
     * @brief Set value of Elapsed property
     *
     * @param[in] value - The microseconds since UTC to set
     *
     * @return The updated elapsed microseconds since UTC
     **/
    uint64_t elapsed(uint64_t value) override;

    /** @brief Notified on time owner changed */
    void onOwnerChanged(Owner owner) override;

    /** @brief Notified on bmc time is changed
     *
     * @param[in] bmcTime - The epoch time in microseconds
     */
    void onBmcTimeChanged(const std::chrono::microseconds& bmcTime) override;

  private:
    /** @brief The diff between BMC and Host time */
    std::chrono::microseconds offset;

    /**
     * @brief The diff between host time and steady clock
     * @details This diff is used to calculate the host time if BMC time
     * is changed and the owner is SPLIT.
     * Without this the host time is lost if BMC time is changed.
     */
    std::chrono::microseconds diffToSteadyClock;

    /** @brief Save the offset value into offsetFile */
    void saveOffset();

    /** @brief The file to store the offset in File System.
     *  Read back when starts
     **/
    static constexpr auto offsetFile = HOST_OFFSET_FILE;
};

} // namespace time
} // namespace phosphor
