#pragma once

#include "message_handler.hpp"

#include <vector>

namespace command
{

/**
 * @struct OpenSessionRequest
 *
 * IPMI Payload for RMCP+ Open Session Request
 */
struct OpenSessionRequest
{
    uint8_t messageTag; // Message tag from request buffer

#if BYTE_ORDER == LITTLE_ENDIAN
    uint8_t maxPrivLevel:4; // Requested maximum privilege level
    uint8_t reserved1:4;    // Reserved for future definition
#endif

#if BYTE_ORDER == BIG_ENDIAN
    uint8_t reserved1:4;    // Reserved for future definition
    uint8_t maxPrivLevel:4; // Requested maximum privilege level

#endif

    uint16_t reserved2;
    uint32_t remoteConsoleSessionID;

    uint8_t authPayload;
    uint16_t reserved3;
    uint8_t authPayloadLen;

#if BYTE_ORDER == LITTLE_ENDIAN
    uint8_t authAlgo:6;
    uint8_t reserved4:2;
#endif

#if BYTE_ORDER == BIG_ENDIAN
    uint8_t reserved4:2;
    uint8_t authAlgo:6;
#endif

    uint8_t reserved5;
    uint16_t reserved6;

    uint8_t intPayload;
    uint16_t reserved7;
    uint8_t intPayloadLen;

#if BYTE_ORDER == LITTLE_ENDIAN
    uint8_t intAlgo:6;
    uint8_t reserved8:2;
#endif

#if BYTE_ORDER == BIG_ENDIAN
    uint8_t reserved8:2;
    uint8_t intAlgo:6;
#endif

    uint8_t reserved9;
    uint16_t reserved10;

    uint8_t confPayload;
    uint16_t reserved11;
    uint8_t confPayloadLen;

#if BYTE_ORDER == LITTLE_ENDIAN
    uint8_t confAlgo:6;
    uint8_t reserved12:2;
#endif

#if BYTE_ORDER == BIG_ENDIAN
    uint8_t reserved12:2;
    uint8_t confAlgo:6;
#endif

    uint8_t reserved13;
    uint16_t reserved14;
} __attribute__((packed));

/**
 * @struct OpenSessionResponse
 *
 * IPMI Payload for RMCP+ Open Session Response
 */
struct OpenSessionResponse
{
    uint8_t messageTag;
    uint8_t status_code;

#if BYTE_ORDER == LITTLE_ENDIAN
    uint8_t maxPrivLevel:4;
    uint8_t reserved1:4;
#endif

#if BYTE_ORDER == BIG_ENDIAN
    uint8_t reserved1:4;
    uint8_t maxPrivLevel:4;
#endif

    uint8_t reserved2;
    uint32_t remoteConsoleSessionID;
    uint32_t managedSystemSessionID;

    uint8_t authPayload;
    uint16_t reserved3;
    uint8_t authPayloadLen;

#if BYTE_ORDER == LITTLE_ENDIAN
    uint8_t authAlgo:6;
    uint8_t reserved4:2;
#endif

#if BYTE_ORDER == BIG_ENDIAN
    uint8_t reserved4:2;
    uint8_t authAlgo:6;
#endif

    uint8_t reserved5;
    uint16_t reserved6;

    uint8_t intPayload;
    uint16_t reserved7;
    uint8_t intPayloadLen;

#if BYTE_ORDER == LITTLE_ENDIAN
    uint8_t intAlgo:6;
    uint8_t reserved8:2;
#endif

#if BYTE_ORDER == BIG_ENDIAN
    uint8_t reserved8:2;
    uint8_t intAlgo:6;

#endif

    uint8_t reserved9;
    uint16_t reserved10;

    uint8_t confPayload;
    uint16_t reserved11;
    uint8_t confPayloadLen;

#if BYTE_ORDER == LITTLE_ENDIAN
    uint8_t confAlgo:6;
    uint8_t reserved12:2;
#endif

#if BYTE_ORDER == BIG_ENDIAN
    uint8_t reserved12:2;
    uint8_t confAlgo:6;
#endif

    uint8_t reserved13;
    uint16_t reserved14;
} __attribute__((packed));

/**
 * @brief RMCP+ Open Session Request, RMCP+ Open Session Response
 *
 * The RMCP+ Open Session request and response messages are used to enable a
 * remote console to discover what Cipher Suite(s) can be used for establishing
 * a session at a requested maximum privilege level. These messages are also
 * used for transferring the sessions IDs that the remote console and BMC wish
 *  to for the session once it’s been activated, and to track each party during
 *  the exchange of messages used for establishing the 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> openSession(const std::vector<uint8_t>& inPayload,
                                 std::shared_ptr<message::Handler>& handler);

} // namespace command
