#pragma once
#include <cstdint>
#include <nlohmann/json.hpp>

namespace resource
{
// clang-format off

enum class State : std::uint8_t{
    Invalid,
    Enabled,
    Disabled,
    StandbyOffline,
    StandbySpare,
    InTest,
    Starting,
    Absent,
    UnavailableOffline,
    Deferring,
    Quiesced,
    Updating,
    Qualified,
};

enum class Health : std::uint8_t{
    Invalid,
    OK,
    Warning,
    Critical,
};

enum class ResetType : std::uint8_t{
    Invalid,
    On,
    ForceOff,
    GracefulShutdown,
    GracefulRestart,
    ForceRestart,
    Nmi,
    ForceOn,
    PushPowerButton,
    PowerCycle,
    Suspend,
    Pause,
    Resume,
};

enum class IndicatorLED : std::uint8_t{
    Invalid,
    Lit,
    Blinking,
    Off,
};

enum class PowerState : std::uint8_t{
    Invalid,
    On,
    Off,
    PoweringOn,
    PoweringOff,
    Paused,
};

enum class DurableNameFormat : std::uint8_t{
    Invalid,
    NAA,
    iQN,
    FC_WWN,
    UUID,
    EUI,
    NQN,
    NSID,
    NGUID,
    MACAddress,
    GCXLID,
};

enum class RackUnits : std::uint8_t{
    Invalid,
    OpenU,
    EIA_310,
};

enum class LocationType : std::uint8_t{
    Invalid,
    Slot,
    Bay,
    Connector,
    Socket,
    Backplane,
    Embedded,
};

enum class Reference : std::uint8_t{
    Invalid,
    Top,
    Bottom,
    Front,
    Rear,
    Left,
    Right,
    Middle,
};

enum class Orientation : std::uint8_t{
    Invalid,
    FrontToBack,
    BackToFront,
    TopToBottom,
    BottomToTop,
    LeftToRight,
    RightToLeft,
};

NLOHMANN_JSON_SERIALIZE_ENUM(State, {
    {State::Invalid, "Invalid"},
    {State::Enabled, "Enabled"},
    {State::Disabled, "Disabled"},
    {State::StandbyOffline, "StandbyOffline"},
    {State::StandbySpare, "StandbySpare"},
    {State::InTest, "InTest"},
    {State::Starting, "Starting"},
    {State::Absent, "Absent"},
    {State::UnavailableOffline, "UnavailableOffline"},
    {State::Deferring, "Deferring"},
    {State::Quiesced, "Quiesced"},
    {State::Updating, "Updating"},
    {State::Qualified, "Qualified"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(Health, {
    {Health::Invalid, "Invalid"},
    {Health::OK, "OK"},
    {Health::Warning, "Warning"},
    {Health::Critical, "Critical"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(ResetType, {
    {ResetType::Invalid, "Invalid"},
    {ResetType::On, "On"},
    {ResetType::ForceOff, "ForceOff"},
    {ResetType::GracefulShutdown, "GracefulShutdown"},
    {ResetType::GracefulRestart, "GracefulRestart"},
    {ResetType::ForceRestart, "ForceRestart"},
    {ResetType::Nmi, "Nmi"},
    {ResetType::ForceOn, "ForceOn"},
    {ResetType::PushPowerButton, "PushPowerButton"},
    {ResetType::PowerCycle, "PowerCycle"},
    {ResetType::Suspend, "Suspend"},
    {ResetType::Pause, "Pause"},
    {ResetType::Resume, "Resume"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(IndicatorLED, {
    {IndicatorLED::Invalid, "Invalid"},
    {IndicatorLED::Lit, "Lit"},
    {IndicatorLED::Blinking, "Blinking"},
    {IndicatorLED::Off, "Off"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(PowerState, {
    {PowerState::Invalid, "Invalid"},
    {PowerState::On, "On"},
    {PowerState::Off, "Off"},
    {PowerState::PoweringOn, "PoweringOn"},
    {PowerState::PoweringOff, "PoweringOff"},
    {PowerState::Paused, "Paused"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(DurableNameFormat, {
    {DurableNameFormat::Invalid, "Invalid"},
    {DurableNameFormat::NAA, "NAA"},
    {DurableNameFormat::iQN, "iQN"},
    {DurableNameFormat::FC_WWN, "FC_WWN"},
    {DurableNameFormat::UUID, "UUID"},
    {DurableNameFormat::EUI, "EUI"},
    {DurableNameFormat::NQN, "NQN"},
    {DurableNameFormat::NSID, "NSID"},
    {DurableNameFormat::NGUID, "NGUID"},
    {DurableNameFormat::MACAddress, "MACAddress"},
    {DurableNameFormat::GCXLID, "GCXLID"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(RackUnits, {
    {RackUnits::Invalid, "Invalid"},
    {RackUnits::OpenU, "OpenU"},
    {RackUnits::EIA_310, "EIA_310"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(LocationType, {
    {LocationType::Invalid, "Invalid"},
    {LocationType::Slot, "Slot"},
    {LocationType::Bay, "Bay"},
    {LocationType::Connector, "Connector"},
    {LocationType::Socket, "Socket"},
    {LocationType::Backplane, "Backplane"},
    {LocationType::Embedded, "Embedded"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(Reference, {
    {Reference::Invalid, "Invalid"},
    {Reference::Top, "Top"},
    {Reference::Bottom, "Bottom"},
    {Reference::Front, "Front"},
    {Reference::Rear, "Rear"},
    {Reference::Left, "Left"},
    {Reference::Right, "Right"},
    {Reference::Middle, "Middle"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(Orientation, {
    {Orientation::Invalid, "Invalid"},
    {Orientation::FrontToBack, "FrontToBack"},
    {Orientation::BackToFront, "BackToFront"},
    {Orientation::TopToBottom, "TopToBottom"},
    {Orientation::BottomToTop, "BottomToTop"},
    {Orientation::LeftToRight, "LeftToRight"},
    {Orientation::RightToLeft, "RightToLeft"},
});

} // namespace resource
// clang-format on
