#pragma once

#include <vector>
#include "message_handler.hpp"

namespace sol
{

namespace command
{

/** @brief SOL Payload Handler
 *
 *  This command is used for activating and deactivating a payload type under a
 *  given IPMI session. The UDP Port number for SOL is the same as the port that
 *  was used to establish the IPMI session.
 *
 *  @param[in] inPayload - Request data for the command.
 *  @param[in] handler - Reference to the message handler.
 *
 *  @return Response data for the command.
 */
std::vector<uint8_t> payloadHandler(const std::vector<uint8_t>& inPayload,
                                    const message::Handler& handler);

constexpr uint8_t netfnTransport = 0x0C;
constexpr uint8_t solActivatingCmd = 0x20;

/** @struct ActivatingRequest
 *
 *  IPMI payload for SOL Activating command.
 */
struct ActivatingRequest
{
#if BYTE_ORDER == LITTLE_ENDIAN
    uint8_t sessionState : 4;       //!< SOL session state.
    uint8_t reserved : 4;           //!< Reserved.
#endif

#if BYTE_ORDER == BIG_ENDIAN
    uint8_t reserved : 4;           //!< Reserved.
    uint8_t sessionState : 4;       //!< SOL session state.
#endif

    uint8_t payloadInstance;        //!< Payload instance.
    uint8_t majorVersion;           //!< SOL format major version
    uint8_t minorVersion;           //!< SOL format minor version
} __attribute__((packed));

/** @brief SOL Activating Command.
 *
 *  This command provides a mechanism for the BMC to notify a remote application
 *  that a SOL payload is activating on another channel.The request message is a
 *  message that is asynchronously generated by the BMC. The BMC will not wait
 *  for a response from the remote console before dropping the serial connection
 *  to proceed with SOL, therefore the remote console does not need to respond
 *  to this command.
 *
 *  @param[in] payloadInstance - SOL payload instance.
 *  @param[in] sessionID - IPMI session ID.
 */
void activating(uint8_t payloadInstance, uint32_t sessionID);

} // namespace command

} // namespace sol
