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

namespace control
{
// clang-format off

enum class ControlType : std::uint8_t{
    Invalid,
    Temperature,
    Power,
    Frequency,
    FrequencyMHz,
    Pressure,
    PressurekPa,
    Valve,
};

enum class SetPointType : std::uint8_t{
    Invalid,
    Single,
    Range,
};

enum class ControlMode : std::uint8_t{
    Invalid,
    Automatic,
    Override,
    Manual,
    Disabled,
};

enum class ImplementationType : std::uint8_t{
    Invalid,
    Programmable,
    Direct,
    Monitored,
};

NLOHMANN_JSON_SERIALIZE_ENUM(ControlType, {
    {ControlType::Invalid, "Invalid"},
    {ControlType::Temperature, "Temperature"},
    {ControlType::Power, "Power"},
    {ControlType::Frequency, "Frequency"},
    {ControlType::FrequencyMHz, "FrequencyMHz"},
    {ControlType::Pressure, "Pressure"},
    {ControlType::PressurekPa, "PressurekPa"},
    {ControlType::Valve, "Valve"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(SetPointType, {
    {SetPointType::Invalid, "Invalid"},
    {SetPointType::Single, "Single"},
    {SetPointType::Range, "Range"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(ControlMode, {
    {ControlMode::Invalid, "Invalid"},
    {ControlMode::Automatic, "Automatic"},
    {ControlMode::Override, "Override"},
    {ControlMode::Manual, "Manual"},
    {ControlMode::Disabled, "Disabled"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(ImplementationType, {
    {ImplementationType::Invalid, "Invalid"},
    {ImplementationType::Programmable, "Programmable"},
    {ImplementationType::Direct, "Direct"},
    {ImplementationType::Monitored, "Monitored"},
});

} // namespace control
// clang-format on
