BareGit
#pragma once

#include <chrono>
#include <cstdint>

/// Injectable source of wall-clock time.
class ClockInterface
{
public:
    virtual ~ClockInterface() = default;

    /// Return the current system-clock instant.
    virtual std::chrono::system_clock::time_point now() const = 0;
};

/// Production system wall clock.
class SystemClock final : public ClockInterface
{
public:
    /// Return the current system-clock instant.
    std::chrono::system_clock::time_point now() const override;
};

/// Return the signed UTC epoch day containing an instant.
std::int64_t utcDay(std::chrono::system_clock::time_point time);