/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP
// This file is generated from clusters-Enums.h.zapt

#pragma once

#include <clusters/shared/Enums.h>
#include <cstdint>

namespace chip {
namespace app {
namespace Clusters {
namespace Thermostat {

// Enum for ACCapacityFormatEnum
enum class ACCapacityFormatEnum : uint8_t {
  kBTUh = 0x00,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 1,
};

// Enum for ACCompressorTypeEnum
enum class ACCompressorTypeEnum : uint8_t {
  kUnknown = 0x00,
  kT1 = 0x01,
  kT2 = 0x02,
  kT3 = 0x03,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 4,
};

// Enum for ACLouverPositionEnum
enum class ACLouverPositionEnum : uint8_t {
  kClosed = 0x01,
  kOpen = 0x02,
  kQuarter = 0x03,
  kHalf = 0x04,
  kThreeQuarters = 0x05,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 0,
};

// Enum for ACRefrigerantTypeEnum
enum class ACRefrigerantTypeEnum : uint8_t {
  kUnknown = 0x00,
  kR22 = 0x01,
  kR410a = 0x02,
  kR407c = 0x03,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 4,
};

// Enum for ACTypeEnum
enum class ACTypeEnum : uint8_t {
  kUnknown = 0x00,
  kCoolingFixed = 0x01,
  kHeatPumpFixed = 0x02,
  kCoolingInverter = 0x03,
  kHeatPumpInverter = 0x04,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 5,
};

// Enum for ControlSequenceOfOperationEnum
enum class ControlSequenceOfOperationEnum : uint8_t {
  kCoolingOnly = 0x00,
  kCoolingWithReheat = 0x01,
  kHeatingOnly = 0x02,
  kHeatingWithReheat = 0x03,
  kCoolingAndHeating = 0x04,
  kCoolingAndHeatingWithReheat = 0x05,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 6,
};

// Enum for PresetScenarioEnum
enum class PresetScenarioEnum : uint8_t {
  kOccupied = 0x01,
  kUnoccupied = 0x02,
  kSleep = 0x03,
  kWake = 0x04,
  kVacation = 0x05,
  kGoingToSleep = 0x06,
  kUserDefined = 0xFE,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 0,
};

// Enum for SetpointChangeSourceEnum
enum class SetpointChangeSourceEnum : uint8_t {
  kManual = 0x00,
  kSchedule = 0x01,
  kExternal = 0x02,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 3,
};

// Enum for SetpointRaiseLowerModeEnum
enum class SetpointRaiseLowerModeEnum : uint8_t {
  kHeat = 0x00,
  kCool = 0x01,
  kBoth = 0x02,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 3,
};

// Enum for StartOfWeekEnum
enum class StartOfWeekEnum : uint8_t {
  kSunday = 0x00,
  kMonday = 0x01,
  kTuesday = 0x02,
  kWednesday = 0x03,
  kThursday = 0x04,
  kFriday = 0x05,
  kSaturday = 0x06,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 7,
};

// Enum for SystemModeEnum
enum class SystemModeEnum : uint8_t {
  kOff = 0x00,
  kAuto = 0x01,
  kCool = 0x03,
  kHeat = 0x04,
  kEmergencyHeat = 0x05,
  kPrecooling = 0x06,
  kFanOnly = 0x07,
  kDry = 0x08,
  kSleep = 0x09,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 2,
};

// Enum for TemperatureSetpointHoldEnum
enum class TemperatureSetpointHoldEnum : uint8_t {
  kSetpointHoldOff = 0x00,
  kSetpointHoldOn = 0x01,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 2,
};

// Enum for ThermostatRunningModeEnum
enum class ThermostatRunningModeEnum : uint8_t {
  kOff = 0x00,
  kCool = 0x03,
  kHeat = 0x04,
  // All received enum values that are not listed above will be mapped
  // to kUnknownEnumValue. This is a helper enum value that should only
  // be used by code to process how it handles receiving and unknown
  // enum value. This specific should never be transmitted.
  kUnknownEnumValue = 1,
};

// Bitmap for ACErrorCodeBitmap
enum class ACErrorCodeBitmap : uint32_t {
  kCompressorFail = 0x1,
  kRoomSensorFail = 0x2,
  kOutdoorSensorFail = 0x4,
  kCoilSensorFail = 0x8,
  kFanFail = 0x10,
};

// Bitmap for Feature
enum class Feature : uint32_t {
  kHeating = 0x1,
  kCooling = 0x2,
  kOccupancy = 0x4,
  kScheduleConfiguration = 0x8,
  kSetback = 0x10,
  kAutoMode = 0x20,
  kLocalTemperatureNotExposed = 0x40,
  kMatterScheduleConfiguration = 0x80,
  kPresets = 0x100,
};

// Bitmap for HVACSystemTypeBitmap
enum class HVACSystemTypeBitmap : uint8_t {
  kCoolingStage = 0x3,
  kHeatingStage = 0xC,
  kHeatingIsHeatPump = 0x10,
  kHeatingUsesFuel = 0x20,
};

// Bitmap for OccupancyBitmap
enum class OccupancyBitmap : uint8_t {
  kOccupied = 0x1,
};

// Bitmap for PresetTypeFeaturesBitmap
enum class PresetTypeFeaturesBitmap : uint16_t {
  kAutomatic = 0x1,
  kSupportsNames = 0x2,
};

// Bitmap for ProgrammingOperationModeBitmap
enum class ProgrammingOperationModeBitmap : uint8_t {
  kScheduleActive = 0x1,
  kAutoRecovery = 0x2,
  kEconomy = 0x4,
};

// Bitmap for RelayStateBitmap
enum class RelayStateBitmap : uint16_t {
  kHeat = 0x1,
  kCool = 0x2,
  kFan = 0x4,
  kHeatStage2 = 0x8,
  kCoolStage2 = 0x10,
  kFanStage2 = 0x20,
  kFanStage3 = 0x40,
};

// Bitmap for RemoteSensingBitmap
enum class RemoteSensingBitmap : uint8_t {
  kLocalTemperature = 0x1,
  kOutdoorTemperature = 0x2,
  kOccupancy = 0x4,
};

// Bitmap for ScheduleDayOfWeekBitmap
enum class ScheduleDayOfWeekBitmap : uint8_t {
  kSunday = 0x1,
  kMonday = 0x2,
  kTuesday = 0x4,
  kWednesday = 0x8,
  kThursday = 0x10,
  kFriday = 0x20,
  kSaturday = 0x40,
  kAway = 0x80,
};

// Bitmap for ScheduleModeBitmap
enum class ScheduleModeBitmap : uint8_t {
  kHeatSetpointPresent = 0x1,
  kCoolSetpointPresent = 0x2,
};

// Bitmap for ScheduleTypeFeaturesBitmap
enum class ScheduleTypeFeaturesBitmap : uint16_t {
  kSupportsPresets = 0x1,
  kSupportsSetpoints = 0x2,
  kSupportsNames = 0x4,
  kSupportsOff = 0x8,
};
} // namespace Thermostat
} // namespace Clusters
} // namespace app
} // namespace chip
