#pragma once

#include <ipmid/api.h>
#include <stdint.h>

#include <map>
#include <string>

static constexpr auto propertiesIntf = "org.freedesktop.DBus.Properties";
static constexpr auto bmcUpdaterServiceName =
    "xyz.openbmc_project.Software.BMC.Updater";
static constexpr auto softwarePath = "/xyz/openbmc_project/software";
static constexpr auto factoryResetIntf =
    "xyz.openbmc_project.Common.FactoryReset";
static constexpr auto stateChassisPath = "/xyz/openbmc_project/state/chassis0";
static constexpr auto stateChassisIntf = "xyz.openbmc_project.State.Chassis";
static constexpr auto stateBmcPath = "/xyz/openbmc_project/state/bmc0";
static constexpr auto stateBmcIntf = "xyz.openbmc_project.State.BMC";

// IPMI commands for net functions.
enum ipmi_netfn_oem_cmds
{
    IPMI_CMD_PREP_FW_UPDATE = 0x10,
    IPMI_CMD_BMC_FACTORY_RESET = 0x11,
    IPMI_CMD_PESEL = 0xF0,
    IPMI_CMD_OCC_RESET = 0x0E,
};

/** @brief Read eSEL data into a string
 *
 *  @param[in] filename - filename of file containing eSEL
 *
 *  @return On success return the eSEL data
 */
std::string readESEL(const char* filename);

/** @brief Create OCC metrics log entry
 *
 *  @param[in] eSELData - eSEL data containing OCC metrics data
 */
void createLogEntry(const std::string& eSELData);

ipmi_ret_t ipmi_ibm_oem_partial_esel(
    ipmi_netfn_t netfn, ipmi_cmd_t cmd, ipmi_request_t request,
    ipmi_response_t response, ipmi_data_len_t data_len, ipmi_context_t context);

struct esel_request_t
{
    uint16_t resid;
    uint16_t selrecord;
    uint16_t offset;
    uint8_t progress;
} __attribute__((packed));

/** @struct SELEventRecord
 *
 *  IPMI SEL event record format.
 */
struct SELEventRecord
{
    uint16_t recordID;        //!< Record ID.
    uint8_t recordType;       //!< Record Type.
    uint32_t timeStamp;       //!< Timestamp.
    uint16_t generatorID;     //!< Generator ID.
    uint8_t eventMsgRevision; //!< Event Message Revision.
    uint8_t sensorType;       //!< Sensor Type.
    uint8_t sensorNum;        //!< Sensor Number.
    uint8_t eventType;        //!< Event Dir | Event Type.
    uint8_t eventData1;       //!< Event Data 1.
    uint8_t eventData2;       //!< Event Data 2.
    uint8_t eventData3;       //!< Event Data 3.
} __attribute__((packed));

using Id = uint8_t;
using Type = uint8_t;
using ReadingType = uint8_t;
using Offset = uint8_t;
using Path = std::string;

struct Data
{
    Id sensorID;
    Type sensorType;
    ReadingType eventReadingType;
    Offset eventOffset;
};

using ObjectIDMap = std::map<Path, Data>;
