#pragma once

#include <unistd.h>
#include <tuple>

namespace phosphor
{
namespace host
{
namespace command
{
    /** @detail After sending SMS_ATN to the Host, Host comes down and
     *          asks why an 'SMS_ATN` was sent.
     *          BMC then sends 'There is a Message to be Read` as response.
     *          Host then comes down asks for Message and the specified
     *          commands and data would go as data conforming to IPMI spec.
     *
     *          Refer: 6.13.2 Send Message Command From System Interface
     *          in IPMI V2.0 spec.
     */

    /** @brief IPMI command */
    using IPMIcmd = uint8_t;

    /** @brief Data associated with command */
    using Data = uint8_t;

    /** @brief <IPMI command, Data> to be sent as payload when Host asks for
     *          the message that can be associated with the previous SMS_ATN
     */
    using IpmiCmdData = std::pair<IPMIcmd, Data>;

    /** @detail Implementation specific callback function to be invoked
     *          conveying the status of the executed command. Specific
     *          implementations may then broadcast an agreed signal
     */
    using CallBack = std::function<void(IpmiCmdData, bool)>;

    /** @detail Tuple encapsulating above 2 to enable using Manager by
     *          different implementations. Users of Manager will supply
     *          <Ipmi command, Data> along with the callback handler.
     *          Manager will invoke the handler onveying the status of
     *          the command.
     */
    using CommandHandler = std::tuple<IpmiCmdData, CallBack>;

} // namespace command
} // namespace host
} // namespace phosphor
