syntax = "proto3";

package rv.data;

option cc_enable_arenas = true;
option csharp_namespace = "Pro.SerializationInterop.RVProtoData";
option swift_prefix = "RVData_";

import "background.proto";
import "collectionElementType.proto";
import "color.proto";
import "effects.proto";
import "graphicsData.proto";
import "input.proto";
import "intRange.proto";
import "layers.proto";
import "messages.proto";
import "propSlide.proto";
import "presentationSlide.proto";
import "stage.proto";
import "timers.proto";
import "url.proto";
import "uuid.proto";

message Action {
  reserved "social_media";
  reserved 31;
  message OldType {
    enum Category {
      CATEGORY_UNKNOWN = 0;
      CATEGORY_MEDIA = 1;
      CATEGORY_APPLICATION = 2;
    }

    .rv.data.Action.OldType.Category category = 1;
    int32 application_type = 2;
  }

  message Label {
    reserved 1;
    string text = 2;
    .rv.data.Color color = 3;
  }

  message LayerIdentification {
    .rv.data.UUID uuid = 1;
    string name = 2;
  }

  message PlaylistItemType {
    .rv.data.UUID playlist_uuid = 1;
    string playlist_name = 2;
    .rv.data.UUID item_uuid = 3;
    string item_name = 4;
    bool select_playlist = 5;
    bool always_retrigger = 6;
  }

  message BlendModeType {
    .rv.data.Layer.BlendMode blend_mode = 1;
    .rv.data.Layer.Blending blend = 2;
  }

  message TransitionType {
    string transition_name = 1;
    .rv.data.Transition transition = 2;
  }

  message DoubleType {
    double value = 1;
  }

  message EffectsType {
    repeated .rv.data.Effect effects = 1;
  }

  message MediaType {
    reserved 13;
    message Image {
    }

    message Video {
      .rv.data.Action.MediaType.PlaybackBehavior playback_behavior = 1;
      .rv.data.Action.MediaType.EndBehavior end_behavior = 2;
      double loop_time = 3;
      uint32 times_to_loop = 4;
      bool soft_loop = 5;
      double soft_loop_duration = 6;
    }

    message Audio {
      enum MediaActionAudioType {
        MEDIA_ACTION_AUDIO_TYPE_TUNE = 0;
        MEDIA_ACTION_AUDIO_TYPE_SOUND = 1;
      }

      .rv.data.Action.MediaType.PlaybackBehavior playback_behavior = 1;
      double loop_time = 2;
      uint32 times_to_loop = 3;
      .rv.data.Action.MediaType.Audio.MediaActionAudioType audio_type = 4;
    }

    message LiveVideo {
    }

    message PlaybackMarker {
      .rv.data.UUID uuid = 1;
      double time = 2;
      .rv.data.Color color = 3;
      string name = 4;
      repeated .rv.data.Action actions = 5;
    }

    enum PlaybackBehavior {
      PLAYBACK_BEHAVIOR_STOP = 0;
      PLAYBACK_BEHAVIOR_LOOP = 1;
      PLAYBACK_BEHAVIOR_LOOP_FOR_COUNT = 2;
      PLAYBACK_BEHAVIOR_LOOP_FOR_TIME = 3;
    }

    enum EndBehavior {
      END_BEHAVIOR_STOP = 0;
      END_BEHAVIOR_STOP_ON_BLACK = 1;
      END_BEHAVIOR_STOP_ON_CLEAR = 2;
      END_BEHAVIOR_FADE_TO_BLACK = 3;
      END_BEHAVIOR_FADE_TO_CLEAR = 4;
    }

    double transition_duration = 1;
    .rv.data.UUID selected_effect_preset_uuid = 2;
    .rv.data.Transition transition = 3;
    repeated .rv.data.Effect effects = 4;
    .rv.data.Media element = 5;
    .rv.data.Action.LayerType layer_type = 10;
    bool always_retrigger = 11;
    repeated .rv.data.Action.MediaType.PlaybackMarker markers = 12;
    oneof MediaType {
      .rv.data.Action.MediaType.Image image = 6;
      .rv.data.Action.MediaType.Video video = 7;
      .rv.data.Action.MediaType.Audio audio = 8;
      .rv.data.Action.MediaType.LiveVideo live_video = 9;
    }
  }

  message SlideType {
    reserved "template";
    reserved 1;
    oneof Slide {
      .rv.data.PresentationSlide presentation = 2;
      .rv.data.PropSlide prop = 3;
    }
  }

  message BackgroundType {
    .rv.data.Background element = 1;
  }

  message TimerType {
    reserved 1;
    reserved 3;
    reserved 5;
    reserved 6;
    reserved 7;
    reserved 8;
    reserved 9;
    enum TimerAction {
      ACTION_START = 0;
      ACTION_STOP = 1;
      ACTION_RESET = 2;
      ACTION_RESET_AND_START = 3;
      ACTION_STOP_AND_RESET = 4;
      ACTION_INCREMENT = 5;
    }

    .rv.data.Action.TimerType.TimerAction action_type = 2;
    .rv.data.CollectionElementType timer_identification = 4;
    .rv.data.Timer.Configuration timer_configuration = 10;
    double increment_amount = 11;
  }

  message ClearType {
    reserved 1;
    reserved 3;
    enum ClearTargetLayer {
      CLEAR_TARGET_LAYER_ALL = 0;
      CLEAR_TARGET_LAYER_AUDIO = 1;
      CLEAR_TARGET_LAYER_BACKGROUND = 2;
      CLEAR_TARGET_LAYER_LIVE_VIDEO = 3;
      CLEAR_TARGET_LAYER_PROP = 4;
      CLEAR_TARGET_LAYER_SLIDE = 5;
      CLEAR_TARGET_LAYER_LOGO = 6;
      CLEAR_TARGET_LAYER_MESSAGES = 7;
      CLEAR_TARGET_LAYER_AUDIO_EFFECTS = 8;
    }

    .rv.data.Action.ClearType.ClearTargetLayer target_layer = 2;
    .rv.data.Action.ContentDestination content_destination = 4;
  }

  message ClearGroupType {
    .rv.data.CollectionElementType identification = 1;
  }

  message TransportControlType {
    message Play {
    }

    message Pause {
    }

    message JumpToTime {
      double time = 1;
    }

    oneof Command {
      .rv.data.Action.TransportControlType.Play play = 1;
      .rv.data.Action.TransportControlType.Pause pause = 2;
      .rv.data.Action.TransportControlType.JumpToTime jumpToTime = 3;
    }
  }

  message StageLayoutType {
    reserved "collection_identification";
    reserved "action_type";
    reserved 1;
    reserved 3;
    enum SlideTarget {
      SLIDE_TARGET_NO_CHANGE = 0;
      SLIDE_TARGET_STAGE_ONLY = 1;
      SLIDE_TARGET_ALL = 2;
    }

    repeated .rv.data.Stage.ScreenAssignment stage_screen_assignments = 4;
    .rv.data.Action.StageLayoutType.SlideTarget slide_target = 5;
  }

  message SlideDestinationType {
    .rv.data.Action.StageLayoutType.SlideTarget slide_target = 1;
  }

  message PropType {
    reserved 1;
    reserved 2;
    .rv.data.CollectionElementType identification = 3;
  }

  message MaskType {
    reserved 1;
    reserved 2;
    .rv.data.CollectionElementType identification = 3;
  }

  message MessageType {
    reserved 2;
    .rv.data.CollectionElementType message_identificaton = 1;
    repeated .rv.data.Message.TokenValue content = 3;
  }

  message CommunicationType {
    message Command {
      string name = 1;
      string value = 2;
      .rv.data.IntRange replacement_range = 3;
      repeated string possible_values = 4;
    }

    message MIDICommand {
      enum State {
        STATE_ON = 0;
        STATE_OFF = 1;
      }

      .rv.data.Action.CommunicationType.MIDICommand.State state = 1;
      uint32 channel = 2;
      uint32 note = 3;
      uint32 intensity = 4;
    }

    message GlobalCacheCommand {
      enum CommandAction {
        COMMAND_ACTION_ON = 0;
        COMMAND_ACTION_OFF = 1;
        COMMAND_ACTION_ON_OFF_WITH_INTERVAL = 2;
        COMMAND_ACTION_OFF_ON_WITH_INTERVAL = 3;
      }

      .rv.data.Action.CommunicationType.GlobalCacheCommand.CommandAction command_action = 1;
      uint32 output = 2;
      uint32 interval = 3;
    }

    message GVG100Command {
      enum CommandAction {
        COMMAND_ACTION_FADE_TO_BLACK = 0;
        COMMAND_ACTION_DSK_TOGGLE = 1;
      }

      .rv.data.Action.CommunicationType.GVG100Command.CommandAction command_action = 1;
    }

    message SonyBVSCommand {
      enum CommandAction {
        COMMAND_ACTION_FADE_TO_BLACK = 0;
        COMMAND_ACTION_KEY_ON = 1;
        COMMAND_ACTION_KEY_OFF = 2;
        COMMAND_ACTION_DSK_ON = 3;
        COMMAND_ACTION_DSK_OFF = 4;
      }

      .rv.data.Action.CommunicationType.SonyBVSCommand.CommandAction command_action = 1;
    }

    .rv.data.CollectionElementType device_identification = 1;
    string format = 2;
    string description = 3;
    repeated .rv.data.Action.CommunicationType.Command commands = 4;
    oneof CommandTypeData {
      .rv.data.Action.CommunicationType.MIDICommand midi_command = 5;
      .rv.data.Action.CommunicationType.GlobalCacheCommand global_cache_command = 6;
      .rv.data.Action.CommunicationType.GVG100Command gvg100_command = 7;
      .rv.data.Action.CommunicationType.SonyBVSCommand sony_BVS_command = 8;
    }
  }

  message MultiScreenType {
    reserved 1;
    reserved 2;
    .rv.data.CollectionElementType identification = 3;
  }

  message DocumentType {
    .rv.data.CollectionElementType identification = 1;
    .rv.data.UUID selected_arrangement = 2;
    .rv.data.Action.ContentDestination content_destination = 3;
  }

  message ExternalPresentationType {
    .rv.data.URL url = 1;
  }

  message AudienceLookType {
    .rv.data.CollectionElementType identification = 1;
  }

  message AudioInputType {
    int32 index = 1;
    bool override_mode = 2;
    .rv.data.AudioInput.BehaviorMode behavior_mode = 3;
    bool override_volume = 4;
    double volume = 5;
  }

  message MacroType {
    .rv.data.CollectionElementType identification = 1;
  }

  message CaptureType {
    message CaptureStart {
      .rv.data.CollectionElementType preset_identification = 1;
    }

    message CaptureStop {
      bool shows_alert_before_stopping = 1;
    }

    oneof CaptureAction {
      .rv.data.Action.CaptureType.CaptureStart start = 1;
      .rv.data.Action.CaptureType.CaptureStop stop = 2;
    }
  }

  enum ContentDestination {
    CONTENT_DESTINATION_GLOBAL = 0;
    CONTENT_DESTINATION_ANNOUNCEMENTS = 1;
  }

  enum LayerType {
    LAYER_TYPE_BACKGROUND = 0;
    LAYER_TYPE_FOREGROUND = 1;
    LAYER_TYPE_FILL = 2;
    LAYER_TYPE_INPUT = 3;
  }

  enum ActionType {
    ACTION_TYPE_UNKNOWN = 0;
    ACTION_TYPE_STAGE_LAYOUT = 1;
    ACTION_TYPE_MEDIA = 2;
    ACTION_TYPE_TIMER = 3;
    ACTION_TYPE_COMMUNICATION = 4;
    ACTION_TYPE_CLEAR = 5;
    ACTION_TYPE_PROP = 6;
    ACTION_TYPE_MASK = 7;
    ACTION_TYPE_MESSAGE = 8;
    ACTION_TYPE_SOCIAL_MEDIA = 9;
    ACTION_TYPE_MULTISCREEN = 10;
    ACTION_TYPE_PRESENTATION_SLIDE = 11;
    ACTION_TYPE_FOREGROUND_MEDIA = 12;
    ACTION_TYPE_BACKGROUND_MEDIA = 13;
    ACTION_TYPE_PRESENTATION_DOCUMENT = 14;
    ACTION_TYPE_PROP_SLIDE = 15;
    ACTION_TYPE_EXTERNAL_PRESENTATION = 17;
    ACTION_TYPE_AUDIENCE_LOOK = 18;
    ACTION_TYPE_AUDIO_INPUT = 19;
    ACTION_TYPE_AUDIO_BIN_PLAYLIST = 20;
    ACTION_TYPE_MEDIA_BIN_PLAYLIST = 21;
    ACTION_TYPE_SLIDE_DESTINATION = 22;
    ACTION_TYPE_MACRO = 23;
    ACTION_TYPE_CLEAR_GROUP = 24;
    ACTION_TYPE_CAPTURE = 25;
    ACTION_TYPE_LIBRARY_PLAYLIST = 26;
  }

  .rv.data.UUID uuid = 1;
  string name = 2;
  .rv.data.Action.Label label = 3;
  double delay_time = 4;
  .rv.data.Action.OldType old_type = 5;
  bool isEnabled = 6;
  .rv.data.Action.LayerIdentification layer_identification = 7;
  double duration = 8;
  .rv.data.Action.ActionType type = 9;
  oneof ActionTypeData {
    .rv.data.CollectionElementType collection_element = 16;
    .rv.data.Action.PlaylistItemType playlist_item = 17;
    .rv.data.Action.BlendModeType blend_mode = 18;
    .rv.data.Action.TransitionType transition = 19;
    .rv.data.Action.MediaType media = 20;
    .rv.data.Action.DoubleType double_item = 21;
    .rv.data.Action.EffectsType effects = 22;
    .rv.data.Action.SlideType slide = 23;
    .rv.data.Action.BackgroundType background = 24;
    .rv.data.Action.TimerType timer = 25;
    .rv.data.Action.ClearType clear = 26;
    .rv.data.Action.StageLayoutType stage = 27;
    .rv.data.Action.PropType prop = 28;
    .rv.data.Action.MaskType mask = 29;
    .rv.data.Action.MessageType message = 30;
    .rv.data.Action.CommunicationType communication = 32;
    .rv.data.Action.MultiScreenType multi_screen = 33;
    .rv.data.Action.DocumentType presentation_document = 34;
    .rv.data.Action.ExternalPresentationType external_presentation = 36;
    .rv.data.Action.AudienceLookType audience_look = 37;
    .rv.data.Action.AudioInputType audio_input = 38;
    .rv.data.Action.SlideDestinationType slide_destination = 39;
    .rv.data.Action.MacroType macro = 40;
    .rv.data.Action.ClearGroupType clear_group = 41;
    .rv.data.Action.TransportControlType transport_control = 42;
    .rv.data.Action.CaptureType capture = 43;
  }
}

