#pragma once

#include <exception>
#include <map>
#include <sstream>
#include <string>

namespace ipmiblob
{

class IpmiException : public std::exception
{
  public:
    const std::map<int, std::string> commonFailures = {
        {0xc0, "busy"},
        {0xc1, "invalid"},
        {0xc3, "timeout"},
    };

    explicit IpmiException(int cc)
    {
        std::ostringstream smessage;

        auto search = commonFailures.find(cc);
        if (search != commonFailures.end())
        {
            smessage << "Received IPMI_CC: " << search->second;
        }
        else
        {
            smessage << "Received IPMI_CC: " << cc;
        }

        message = smessage.str();
    }
    explicit IpmiException(const std::string& message) : message(message){};

    virtual const char* what() const noexcept override
    {
        return message.c_str();
    }

  private:
    std::string message;
};

} // namespace ipmiblob
