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

namespace circuit
{
// clang-format off

enum class PowerState : std::uint8_t{
    Invalid,
    On,
    Off,
    PowerCycle,
};

enum class BreakerStates : std::uint8_t{
    Invalid,
    Normal,
    Tripped,
    Off,
};

enum class PowerRestorePolicyTypes : std::uint8_t{
    Invalid,
    AlwaysOn,
    AlwaysOff,
    LastState,
};

enum class PhaseWiringType : std::uint8_t{
    Invalid,
    OnePhase3Wire,
    TwoPhase3Wire,
    OneOrTwoPhase3Wire,
    TwoPhase4Wire,
    ThreePhase4Wire,
    ThreePhase5Wire,
};

enum class NominalVoltageType : std::uint8_t{
    Invalid,
    AC100To127V,
    AC100To240V,
    AC100To277V,
    AC120V,
    AC200To240V,
    AC200To277V,
    AC208V,
    AC230V,
    AC240V,
    AC240AndDC380V,
    AC277V,
    AC277AndDC380V,
    AC400V,
    AC480V,
    DC48V,
    DC240V,
    DC380V,
    DCNeg48V,
    DC16V,
    DC12V,
    DC9V,
    DC5V,
    DC3_3V,
    DC1_8V,
};

enum class PlugType : std::uint8_t{
    Invalid,
    NEMA_5_15P,
    NEMA_L5_15P,
    NEMA_5_20P,
    NEMA_L5_20P,
    NEMA_L5_30P,
    NEMA_6_15P,
    NEMA_L6_15P,
    NEMA_6_20P,
    NEMA_L6_20P,
    NEMA_L6_30P,
    NEMA_L14_20P,
    NEMA_L14_30P,
    NEMA_L15_20P,
    NEMA_L15_30P,
    NEMA_L21_20P,
    NEMA_L21_30P,
    NEMA_L22_20P,
    NEMA_L22_30P,
    California_CS8265,
    California_CS8365,
    IEC_60320_C14,
    IEC_60320_C20,
    IEC_60309_316P6,
    IEC_60309_332P6,
    IEC_60309_363P6,
    IEC_60309_516P6,
    IEC_60309_532P6,
    IEC_60309_563P6,
    IEC_60309_460P9,
    IEC_60309_560P9,
    Field_208V_3P4W_60A,
    Field_400V_3P5W_32A,
};

enum class CircuitType : std::uint8_t{
    Invalid,
    Mains,
    Branch,
    Subfeed,
    Feeder,
    Bus,
};

enum class VoltageType : std::uint8_t{
    Invalid,
    AC,
    DC,
};

NLOHMANN_JSON_SERIALIZE_ENUM(PowerState, {
    {PowerState::Invalid, "Invalid"},
    {PowerState::On, "On"},
    {PowerState::Off, "Off"},
    {PowerState::PowerCycle, "PowerCycle"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(BreakerStates, {
    {BreakerStates::Invalid, "Invalid"},
    {BreakerStates::Normal, "Normal"},
    {BreakerStates::Tripped, "Tripped"},
    {BreakerStates::Off, "Off"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(PowerRestorePolicyTypes, {
    {PowerRestorePolicyTypes::Invalid, "Invalid"},
    {PowerRestorePolicyTypes::AlwaysOn, "AlwaysOn"},
    {PowerRestorePolicyTypes::AlwaysOff, "AlwaysOff"},
    {PowerRestorePolicyTypes::LastState, "LastState"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(PhaseWiringType, {
    {PhaseWiringType::Invalid, "Invalid"},
    {PhaseWiringType::OnePhase3Wire, "OnePhase3Wire"},
    {PhaseWiringType::TwoPhase3Wire, "TwoPhase3Wire"},
    {PhaseWiringType::OneOrTwoPhase3Wire, "OneOrTwoPhase3Wire"},
    {PhaseWiringType::TwoPhase4Wire, "TwoPhase4Wire"},
    {PhaseWiringType::ThreePhase4Wire, "ThreePhase4Wire"},
    {PhaseWiringType::ThreePhase5Wire, "ThreePhase5Wire"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(NominalVoltageType, {
    {NominalVoltageType::Invalid, "Invalid"},
    {NominalVoltageType::AC100To127V, "AC100To127V"},
    {NominalVoltageType::AC100To240V, "AC100To240V"},
    {NominalVoltageType::AC100To277V, "AC100To277V"},
    {NominalVoltageType::AC120V, "AC120V"},
    {NominalVoltageType::AC200To240V, "AC200To240V"},
    {NominalVoltageType::AC200To277V, "AC200To277V"},
    {NominalVoltageType::AC208V, "AC208V"},
    {NominalVoltageType::AC230V, "AC230V"},
    {NominalVoltageType::AC240V, "AC240V"},
    {NominalVoltageType::AC240AndDC380V, "AC240AndDC380V"},
    {NominalVoltageType::AC277V, "AC277V"},
    {NominalVoltageType::AC277AndDC380V, "AC277AndDC380V"},
    {NominalVoltageType::AC400V, "AC400V"},
    {NominalVoltageType::AC480V, "AC480V"},
    {NominalVoltageType::DC48V, "DC48V"},
    {NominalVoltageType::DC240V, "DC240V"},
    {NominalVoltageType::DC380V, "DC380V"},
    {NominalVoltageType::DCNeg48V, "DCNeg48V"},
    {NominalVoltageType::DC16V, "DC16V"},
    {NominalVoltageType::DC12V, "DC12V"},
    {NominalVoltageType::DC9V, "DC9V"},
    {NominalVoltageType::DC5V, "DC5V"},
    {NominalVoltageType::DC3_3V, "DC3_3V"},
    {NominalVoltageType::DC1_8V, "DC1_8V"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(PlugType, {
    {PlugType::Invalid, "Invalid"},
    {PlugType::NEMA_5_15P, "NEMA_5_15P"},
    {PlugType::NEMA_L5_15P, "NEMA_L5_15P"},
    {PlugType::NEMA_5_20P, "NEMA_5_20P"},
    {PlugType::NEMA_L5_20P, "NEMA_L5_20P"},
    {PlugType::NEMA_L5_30P, "NEMA_L5_30P"},
    {PlugType::NEMA_6_15P, "NEMA_6_15P"},
    {PlugType::NEMA_L6_15P, "NEMA_L6_15P"},
    {PlugType::NEMA_6_20P, "NEMA_6_20P"},
    {PlugType::NEMA_L6_20P, "NEMA_L6_20P"},
    {PlugType::NEMA_L6_30P, "NEMA_L6_30P"},
    {PlugType::NEMA_L14_20P, "NEMA_L14_20P"},
    {PlugType::NEMA_L14_30P, "NEMA_L14_30P"},
    {PlugType::NEMA_L15_20P, "NEMA_L15_20P"},
    {PlugType::NEMA_L15_30P, "NEMA_L15_30P"},
    {PlugType::NEMA_L21_20P, "NEMA_L21_20P"},
    {PlugType::NEMA_L21_30P, "NEMA_L21_30P"},
    {PlugType::NEMA_L22_20P, "NEMA_L22_20P"},
    {PlugType::NEMA_L22_30P, "NEMA_L22_30P"},
    {PlugType::California_CS8265, "California_CS8265"},
    {PlugType::California_CS8365, "California_CS8365"},
    {PlugType::IEC_60320_C14, "IEC_60320_C14"},
    {PlugType::IEC_60320_C20, "IEC_60320_C20"},
    {PlugType::IEC_60309_316P6, "IEC_60309_316P6"},
    {PlugType::IEC_60309_332P6, "IEC_60309_332P6"},
    {PlugType::IEC_60309_363P6, "IEC_60309_363P6"},
    {PlugType::IEC_60309_516P6, "IEC_60309_516P6"},
    {PlugType::IEC_60309_532P6, "IEC_60309_532P6"},
    {PlugType::IEC_60309_563P6, "IEC_60309_563P6"},
    {PlugType::IEC_60309_460P9, "IEC_60309_460P9"},
    {PlugType::IEC_60309_560P9, "IEC_60309_560P9"},
    {PlugType::Field_208V_3P4W_60A, "Field_208V_3P4W_60A"},
    {PlugType::Field_400V_3P5W_32A, "Field_400V_3P5W_32A"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(CircuitType, {
    {CircuitType::Invalid, "Invalid"},
    {CircuitType::Mains, "Mains"},
    {CircuitType::Branch, "Branch"},
    {CircuitType::Subfeed, "Subfeed"},
    {CircuitType::Feeder, "Feeder"},
    {CircuitType::Bus, "Bus"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(VoltageType, {
    {VoltageType::Invalid, "Invalid"},
    {VoltageType::AC, "AC"},
    {VoltageType::DC, "DC"},
});

} // namespace circuit
// clang-format on
