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

namespace drive
{
// clang-format off

enum class MediaType : std::uint8_t{
    Invalid,
    HDD,
    SSD,
    SMR,
};

enum class HotspareType : std::uint8_t{
    Invalid,
    None,
    Global,
    Chassis,
    Dedicated,
};

enum class EncryptionAbility : std::uint8_t{
    Invalid,
    None,
    SelfEncryptingDrive,
    Other,
};

enum class EncryptionStatus : std::uint8_t{
    Invalid,
    Unecrypted,
    Unlocked,
    Locked,
    Foreign,
    Unencrypted,
};

enum class StatusIndicator : std::uint8_t{
    Invalid,
    OK,
    Fail,
    Rebuild,
    PredictiveFailureAnalysis,
    Hotspare,
    InACriticalArray,
    InAFailedArray,
};

enum class HotspareReplacementModeType : std::uint8_t{
    Invalid,
    Revertible,
    NonRevertible,
};

enum class DataSanitizationType : std::uint8_t{
    Invalid,
    BlockErase,
    CryptographicErase,
    Overwrite,
};

enum class FormFactor : std::uint8_t{
    Invalid,
    Drive3_5,
    Drive2_5,
    EDSFF_1U_Long,
    EDSFF_1U_Short,
    EDSFF_E3_Short,
    EDSFF_E3_Long,
    M2_2230,
    M2_2242,
    M2_2260,
    M2_2280,
    M2_22110,
    U2,
    PCIeSlotFullLength,
    PCIeSlotLowProfile,
    PCIeHalfLength,
    OEM,
};

NLOHMANN_JSON_SERIALIZE_ENUM(MediaType, {
    {MediaType::Invalid, "Invalid"},
    {MediaType::HDD, "HDD"},
    {MediaType::SSD, "SSD"},
    {MediaType::SMR, "SMR"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(HotspareType, {
    {HotspareType::Invalid, "Invalid"},
    {HotspareType::None, "None"},
    {HotspareType::Global, "Global"},
    {HotspareType::Chassis, "Chassis"},
    {HotspareType::Dedicated, "Dedicated"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(EncryptionAbility, {
    {EncryptionAbility::Invalid, "Invalid"},
    {EncryptionAbility::None, "None"},
    {EncryptionAbility::SelfEncryptingDrive, "SelfEncryptingDrive"},
    {EncryptionAbility::Other, "Other"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(EncryptionStatus, {
    {EncryptionStatus::Invalid, "Invalid"},
    {EncryptionStatus::Unecrypted, "Unecrypted"},
    {EncryptionStatus::Unlocked, "Unlocked"},
    {EncryptionStatus::Locked, "Locked"},
    {EncryptionStatus::Foreign, "Foreign"},
    {EncryptionStatus::Unencrypted, "Unencrypted"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(StatusIndicator, {
    {StatusIndicator::Invalid, "Invalid"},
    {StatusIndicator::OK, "OK"},
    {StatusIndicator::Fail, "Fail"},
    {StatusIndicator::Rebuild, "Rebuild"},
    {StatusIndicator::PredictiveFailureAnalysis, "PredictiveFailureAnalysis"},
    {StatusIndicator::Hotspare, "Hotspare"},
    {StatusIndicator::InACriticalArray, "InACriticalArray"},
    {StatusIndicator::InAFailedArray, "InAFailedArray"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(HotspareReplacementModeType, {
    {HotspareReplacementModeType::Invalid, "Invalid"},
    {HotspareReplacementModeType::Revertible, "Revertible"},
    {HotspareReplacementModeType::NonRevertible, "NonRevertible"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(DataSanitizationType, {
    {DataSanitizationType::Invalid, "Invalid"},
    {DataSanitizationType::BlockErase, "BlockErase"},
    {DataSanitizationType::CryptographicErase, "CryptographicErase"},
    {DataSanitizationType::Overwrite, "Overwrite"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(FormFactor, {
    {FormFactor::Invalid, "Invalid"},
    {FormFactor::Drive3_5, "Drive3_5"},
    {FormFactor::Drive2_5, "Drive2_5"},
    {FormFactor::EDSFF_1U_Long, "EDSFF_1U_Long"},
    {FormFactor::EDSFF_1U_Short, "EDSFF_1U_Short"},
    {FormFactor::EDSFF_E3_Short, "EDSFF_E3_Short"},
    {FormFactor::EDSFF_E3_Long, "EDSFF_E3_Long"},
    {FormFactor::M2_2230, "M2_2230"},
    {FormFactor::M2_2242, "M2_2242"},
    {FormFactor::M2_2260, "M2_2260"},
    {FormFactor::M2_2280, "M2_2280"},
    {FormFactor::M2_22110, "M2_22110"},
    {FormFactor::U2, "U2"},
    {FormFactor::PCIeSlotFullLength, "PCIeSlotFullLength"},
    {FormFactor::PCIeSlotLowProfile, "PCIeSlotLowProfile"},
    {FormFactor::PCIeHalfLength, "PCIeHalfLength"},
    {FormFactor::OEM, "OEM"},
});

} // namespace drive
// clang-format on
// NOLINTEND
