#pragma once

#include <cstdint>

// IPMI commands for Storage net functions.
enum ipmi_netfn_storage_cmds
{
    // Get capability bits
    IPMI_CMD_GET_FRU_INV_AREA_INFO = 0x10,
    IPMI_CMD_GET_REPOSITORY_INFO = 0x20,
    IPMI_CMD_READ_FRU_DATA = 0x11,
    IPMI_CMD_RESERVE_SDR = 0x22,
    IPMI_CMD_GET_SDR = 0x23,
    IPMI_CMD_GET_SEL_INFO = 0x40,
    IPMI_CMD_RESERVE_SEL = 0x42,
    IPMI_CMD_GET_SEL_ENTRY = 0x43,
    IPMI_CMD_ADD_SEL = 0x44,
    IPMI_CMD_DELETE_SEL = 0x46,
    IPMI_CMD_CLEAR_SEL = 0x47,
    IPMI_CMD_GET_SEL_TIME = 0x48,
    IPMI_CMD_SET_SEL_TIME = 0x49,

};

struct ipmi_add_sel_request_t
{

    uint8_t recordid[2];
    uint8_t recordtype;
    uint8_t timestamp[4];
    uint8_t generatorid[2];
    uint8_t evmrev;
    uint8_t sensortype;
    uint8_t sensornumber;
    uint8_t eventdir;
    uint8_t eventdata[3];
};

/**
 * @struct Read FRU Data command request data
 */
struct ReadFruDataRequest
{
    uint8_t fruID;    ///< FRU Device ID. FFh = reserved
    uint8_t offsetLS; ///< FRU Inventory Offset to read, LS Byte
    uint8_t offsetMS; ///< FRU Inventory Offset ro read, MS Byte
    uint8_t count;    ///< Count to read
} __attribute__((packed));

/**
 * @struct Read FRU Data command response data
 */
struct ReadFruDataResponse
{
    uint8_t count;  ///< Response data Count.
    uint8_t data[]; ///< Response data.
} __attribute__((packed));

/**
 * @struct Get FRU inventory area info command request data
 */
struct FruInvenAreaInfoRequest
{
    uint8_t fruID; ///< FRU Device ID. FFH = reserved.
} __attribute__((packed));

/**
 * @struct Get FRU inventory area info command response
 */
struct FruInvenAreaInfoResponse
{
    uint8_t sizels; ///< Fru Inventory area size in bytes, LS Byte
    uint8_t sizems; ///< Fru Inventory are size in bytes, MS Byte
    uint8_t access; ///< 0b Devices is accessed by bytes, 1b - by words
} __attribute__((packed));

/**
 * @struct Get Repository info command response
 */
struct GetRepositoryInfoResponse
{
    uint8_t sdrVersion;           //< SDR version
    uint8_t recordCountLs;        //< Record count LS byte
    uint8_t recordCountMs;        //< Record count MS bte
    uint8_t freeSpace[2];         //< Free space in bytes, LS first
    uint8_t additionTimestamp[4]; //< Most recent addition timestamp LS first
    uint8_t deletionTimestamp[4]; //< Most recent deletion timestamp LS first
    uint8_t operationSupport;     //< Operation support
} __attribute__((packed));
