#ifndef OPENBMC_IPMI_FRU_PARSER_H
#define OPENBMC_IPMI_FRU_PARSER_H

#include <systemd/sd-bus.h>
#include <array>
#include <string>
#include <map>

enum ipmi_fru_area_type
{
    IPMI_FRU_AREA_INTERNAL_USE = 0x00,
    IPMI_FRU_AREA_CHASSIS_INFO,
    IPMI_FRU_AREA_BOARD_INFO,
    IPMI_FRU_AREA_PRODUCT_INFO,
    IPMI_FRU_AREA_MULTI_RECORD,
    IPMI_FRU_AREA_TYPE_MAX
};


enum openbmc_vpd_key_id
{
  OPENBMC_VPD_KEY_CHASSIS_TYPE = 1, /* not a type/len */
  OPENBMC_VPD_KEY_CHASSIS_PART_NUM,
  OPENBMC_VPD_KEY_CHASSIS_SERIAL_NUM,
  OPENBMC_VPD_KEY_CHASSIS_CUSTOM1,
  OPENBMC_VPD_KEY_CHASSIS_CUSTOM2,
  OPENBMC_VPD_KEY_CHASSIS_CUSTOM3,
  OPENBMC_VPD_KEY_CHASSIS_CUSTOM4,
  OPENBMC_VPD_KEY_CHASSIS_CUSTOM5,
  OPENBMC_VPD_KEY_CHASSIS_CUSTOM6,
  OPENBMC_VPD_KEY_CHASSIS_CUSTOM7,
  OPENBMC_VPD_KEY_CHASSIS_CUSTOM8,
  OPENBMC_VPD_KEY_CHASSIS_MAX = OPENBMC_VPD_KEY_CHASSIS_CUSTOM8,
  /* TODO: chassis_custom_fields */

  OPENBMC_VPD_KEY_BOARD_MFG_DATE, /* not a type/len */
  OPENBMC_VPD_KEY_BOARD_MFR,
  OPENBMC_VPD_KEY_BOARD_NAME,
  OPENBMC_VPD_KEY_BOARD_SERIAL_NUM,
  OPENBMC_VPD_KEY_BOARD_PART_NUM,
  OPENBMC_VPD_KEY_BOARD_FRU_FILE_ID,
  OPENBMC_VPD_KEY_BOARD_CUSTOM1,
  OPENBMC_VPD_KEY_BOARD_CUSTOM2,
  OPENBMC_VPD_KEY_BOARD_CUSTOM3,
  OPENBMC_VPD_KEY_BOARD_CUSTOM4,
  OPENBMC_VPD_KEY_BOARD_CUSTOM5,
  OPENBMC_VPD_KEY_BOARD_CUSTOM6,
  OPENBMC_VPD_KEY_BOARD_CUSTOM7,
  OPENBMC_VPD_KEY_BOARD_CUSTOM8,
  OPENBMC_VPD_KEY_BOARD_MAX = OPENBMC_VPD_KEY_BOARD_CUSTOM8,
  /* TODO: board_custom_fields */

  OPENBMC_VPD_KEY_PRODUCT_MFR,
  OPENBMC_VPD_KEY_PRODUCT_NAME,
  OPENBMC_VPD_KEY_PRODUCT_PART_MODEL_NUM,
  OPENBMC_VPD_KEY_PRODUCT_VER,
  OPENBMC_VPD_KEY_PRODUCT_SERIAL_NUM,
  OPENBMC_VPD_KEY_PRODUCT_ASSET_TAG,
  OPENBMC_VPD_KEY_PRODUCT_FRU_FILE_ID,
  OPENBMC_VPD_KEY_PRODUCT_CUSTOM1,
  OPENBMC_VPD_KEY_PRODUCT_CUSTOM2,
  OPENBMC_VPD_KEY_PRODUCT_CUSTOM3,
  OPENBMC_VPD_KEY_PRODUCT_CUSTOM4,
  OPENBMC_VPD_KEY_PRODUCT_CUSTOM5,
  OPENBMC_VPD_KEY_PRODUCT_CUSTOM6,
  OPENBMC_VPD_KEY_PRODUCT_CUSTOM7,
  OPENBMC_VPD_KEY_PRODUCT_CUSTOM8,
  OPENBMC_VPD_KEY_PRODUCT_MAX = OPENBMC_VPD_KEY_PRODUCT_CUSTOM8,

  OPENBMC_VPD_KEY_MAX,
  OPENBMC_VPD_KEY_CUSTOM_FIELDS_MAX=8,

};

using IPMIFruInfo = std::array<std::pair<std::string,std::string>,
                           OPENBMC_VPD_KEY_MAX>;

struct IPMIFruData
{
    std::string section;
    std::string property;
    std::string delimiter;
};

using DbusProperty = std::string;
using DbusPropertyMap = std::map<DbusProperty,IPMIFruData>;

using DbusInterface = std::string;
using DbusInterfaceMap = std::map<DbusInterface,DbusPropertyMap>;

using FruInstancePath = std::string;
using FruInstanceMap = std::map<FruInstancePath,DbusInterfaceMap>;

using FruId = uint32_t;
using FruMap = std::map<FruId,FruInstanceMap>;

/* Parse an IPMI write fru data message into a dictionary containing name value pair of VPD entries.*/
int parse_fru (const void* msgbuf, sd_bus_message* vpdtbl);

int parse_fru_area (const uint8_t area, const void* msgbuf,
                    const size_t len, IPMIFruInfo& info);

#endif
