syntax = "proto3";
package pulse.cdm.bind;
option java_package = "com.kitware.pulse.cdm.bind";
option csharp_namespace = "pulse.cdm.bind";
option optimize_for = SPEED;

import "pulse/cdm/bind/Environment.proto";
import "pulse/cdm/bind/Actions.proto";

message AnyEnvironmentActionData
{
  oneof Action
  {
    ChangeEnvironmentalConditionsData    ChangeEnvironmentalConditions = 1;
    ThermalApplicationData               ThermalApplication            = 2;
  }
}

message EnvironmentActionData
{
  ActionData                             Action                        = 1;
}

/** @brief The environment conditions to change. */
message ChangeEnvironmentalConditionsData
{
  EnvironmentActionData                  EnvironmentAction             = 1;
  oneof Option
  {
    EnvironmentalConditionsData          EnvironmentalConditions       = 2;/**<< @brief An environment conditions object with properties to set in the system environmental conditions. */
    string                               EnvironmentalConditionsFile   = 3;/**<< @brief File containing an environment conditions objet with properties to set in the environmental conditions. */
  }
}

/** @brief Create an external heat source. */
message ThermalApplicationData
{
  EnvironmentActionData                  EnvironmentAction             = 1;
  ActiveConditioningData                 ActiveHeating                 = 2; /**<< @brief @copybrief Environment_ActiveHeatingData */
  ActiveConditioningData                 ActiveCooling                 = 3; /**<< @brief @copybrief Environment_ActiveCoolingData */
  AppliedTemperatureData                 AppliedTemperature            = 4; /**<< @brief @copybrief Environment_AppliedTemperatureData */
  bool                                   AppendToPrevious              = 5; /**<< @brief Appends data provided to the engine without removing currect applications. @details For example if a previous aciton turned on heating, and you wanted to add cooling, set append to true, if you want tto cool and also have the heating off, set to false */
}