#pragma once

#include <unistd.h>

#include <functional>
#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
