#pragma once
#include <functional>
#include <org/open_power/Sensor/Aggregation/History/Maximum/server.hpp>

namespace witherspoon
{
namespace power
{
namespace history
{

template <typename T>
using ServerObject = typename sdbusplus::server::object::object<T>;

using MaximumInterface = sdbusplus::org::open_power::
        Sensor::Aggregation::History::server::Maximum;

/**
 * @class Maximum
 *
 * Implements Sensor.Aggregation.History.Maximum
 *
 * This includes a property that is an array of timestamp/maximum tuples
 * and a property to specify the scale.
 */
class Maximum : public ServerObject<MaximumInterface>
{
    public:

        static constexpr auto name = "maximum";

        Maximum() = delete;
        Maximum(const Maximum&) = delete;
        Maximum& operator=(const Maximum&) = delete;
        Maximum(Maximum&&) = delete;
        Maximum& operator=(Maximum&&) = delete;
        ~Maximum() = default;

        /**
         * @brief Constructor
         *
         * @param[in] bus - D-Bus object
         * @param[in] objectPath - the D-Bus object path
         */
        Maximum(sdbusplus::bus::bus& bus,
                const std::string& objectPath) :
                ServerObject<MaximumInterface>(bus, objectPath.c_str())
        {
            unit(Maximum::Unit::Watts);
            scale(0);
        }
};


}
}
}