syntax = "proto3";

package rv.data;

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

import "action.proto";
import "alphaType.proto";
import "ccli.proto";
import "cue.proto";
import "effects.proto";
import "graphicsData.proto";
import "input.proto";
import "macros.proto";
import "messages.proto";
import "playlist.proto";
import "preferences.proto";
import "presentation.proto";
import "proCoreTestPatterns.proto";
import "propDocument.proto";
import "propresenter.proto";
import "slide.proto";
import "recording.proto";
import "stage.proto";
import "timers.proto";
import "url.proto";
import "uuid.proto";
import "proworkspace.proto";
import "digitalAudio.proto";
import "proAudienceLook.proto";
import "proMask.proto";
import "timedPlayback.proto";

message MediaMetadataRequestInfo {
  string file_path = 1;
  float time = 2;
  uint32 width = 3;
  uint32 height = 4;
  repeated .rv.data.Effect effects = 5;
  .rv.data.Graphics.EdgeInsets crop_insets = 6;
  .rv.data.Media.DrawingProperties.NativeRotationType native_rotation = 7;
  bool flipped_horizontally = 8;
  bool flipped_vertically = 9;
  .rv.data.AlphaType alpha_type = 10;
}

message MediaMetadataRequestResponse {
  message Metadata {
    enum ContentType {
      CONTENT_TYPE_UNKNOWN = 0;
      CONTENT_TYPE_AUDIO = 1;
      CONTENT_TYPE_IMAGE = 2;
      CONTENT_TYPE_VIDEO = 3;
    }

    uint32 width = 1;
    uint32 height = 2;
    float fps = 3;
    float duration = 4;
    uint32 number_audio_channels = 5;
    string codec = 6;
    string artist = 7;
    string title = 8;
    float rotation = 9;
    .rv.data.MediaMetadataRequestResponse.Metadata.ContentType content_type = 10;
    bool has_alpha_channel = 11;
  }

  message BitmapInfo {
    uint32 width = 1;
    uint32 height = 2;
  }

  .rv.data.MediaMetadataRequestResponse.Metadata metadata = 1;
  .rv.data.MediaMetadataRequestResponse.BitmapInfo generated_bitmap_info = 2;
}

message NetworkIdentifier {
  message IndexOrName {
    oneof Component {
      int32 index = 1;
      string name = 2;
    }
  }

  repeated .rv.data.NetworkIdentifier.IndexOrName identifiers = 1;
}

message TriggerOptions {
  .rv.data.Action.ContentDestination content_destination = 1;
  bool suppress_auto_start_video = 2;
  bool suppress_media_background = 3;
  bool force_retrigger = 4;
  bool reset_chord_chart = 5;
  bool from_playlist_library = 6;
  bool from_timeline = 7;
  bool ignore_analytics = 8;
  double start_position = 9;
  .rv.data.TriggerSource trigger_source = 10;
  .rv.data.NetworkIdentifier network_identifier = 11;
  bool request_client_context = 12;
}

message ControlTransport {
  message PlayControlType {
  }

  message PauseControlType {
  }

  message RewindControlType {
  }

  message FastForwardControlType {
  }

  message SkipBackControlType {
    double offset = 1;
  }

  message SkipForwardControlType {
    double offset = 1;
  }

  message StepBackControlType {
  }

  message StepForwardControlType {
  }

  message GoToStartControlType {
    double offset = 1;
  }

  message GoToEndControlType {
    double offset = 1;
  }

  message JumpToTimeControlType {
    double time = 1;
  }

  message JumpToPercentControlType {
    double percent = 1;
  }

  message MarkInPointControlType {
    double time = 1;
  }

  message MarkOutPointControlType {
    double time = 1;
  }

  message SetScaleModeControlType {
    .rv.data.Media.ScaleBehavior mode = 1;
    bool is_blurred = 3;
    .rv.data.Media.ScaleAlignment alignment = 2;
  }

  message SetFlippedModeControlType {
    bool horizontal = 1;
    bool vertical = 2;
  }

  message SetPlayRateControlType {
    double play_rate = 1;
  }

  message SetNativeRotationControlType {
    .rv.data.Media.DrawingProperties.NativeRotationType rotation = 1;
  }

  message SetAlphaTypeControlType {
    .rv.data.AlphaType alpha_type = 1;
  }

  message TogglePlaybackControlType {
  }

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

  message UpdateEffectControlType {
    .rv.data.Effect effect = 1;
  }

  message BeginScrubControlType {
    double time = 1;
  }

  message EndScrubControlType {
    double time = 1;
  }

  message ScrubToTimeControlType {
    double time = 1;
  }

  message ScrubToPercentControlType {
    double percent = 1;
  }

  message SetAudioFadeType {
    double fade_in_duration = 1;
    double fade_out_duration = 2;
    bool should_fade_in = 3;
    bool should_fade_out = 4;
  }

  message SetAudioPropertiesType {
    .rv.data.Media.AudioProperties audio_properties = 1;
    repeated bool solo = 2;
  }

  oneof ControlType {
    .rv.data.ControlTransport.PlayControlType play = 1;
    .rv.data.ControlTransport.PauseControlType pause = 2;
    .rv.data.ControlTransport.RewindControlType rewind = 3;
    .rv.data.ControlTransport.FastForwardControlType fastforward = 4;
    .rv.data.ControlTransport.SkipBackControlType skip_back = 5;
    .rv.data.ControlTransport.SkipForwardControlType skip_forward = 6;
    .rv.data.ControlTransport.StepBackControlType step_back = 7;
    .rv.data.ControlTransport.StepForwardControlType step_forward = 8;
    .rv.data.ControlTransport.GoToStartControlType go_to_start = 9;
    .rv.data.ControlTransport.GoToEndControlType go_to_end = 10;
    .rv.data.ControlTransport.JumpToTimeControlType jump_to_time = 11;
    .rv.data.ControlTransport.JumpToPercentControlType jump_to_percent = 12;
    .rv.data.ControlTransport.MarkInPointControlType mark_in = 13;
    .rv.data.ControlTransport.MarkOutPointControlType mark_out = 14;
    .rv.data.ControlTransport.SetScaleModeControlType set_scale_mode = 15;
    .rv.data.ControlTransport.SetFlippedModeControlType set_flipped_mode = 16;
    .rv.data.ControlTransport.SetPlayRateControlType set_play_rate = 17;
    .rv.data.ControlTransport.SetNativeRotationControlType set_rotation = 18;
    .rv.data.ControlTransport.TogglePlaybackControlType toggle_playback = 19;
    .rv.data.ControlTransport.SetEffectsControlType set_effects = 20;
    .rv.data.ControlTransport.UpdateEffectControlType update_effect = 21;
    .rv.data.ControlTransport.BeginScrubControlType begin_scrub = 22;
    .rv.data.ControlTransport.EndScrubControlType end_scrub = 23;
    .rv.data.ControlTransport.ScrubToTimeControlType scrub_to_time = 24;
    .rv.data.ControlTransport.ScrubToPercentControlType scrub_to_percent = 25;
    .rv.data.ControlTransport.SetAudioFadeType set_audio_fade = 26;
    .rv.data.ControlTransport.SetAudioPropertiesType set_audio_properties = 27;
    .rv.data.ControlTransport.SetAlphaTypeControlType set_alpha_type = 28;
  }
}

message AudioInputSettings {
  repeated .rv.data.AudioInput inputs = 1;
  double transitionTime = 2;
}

message VideoInputSettings {
  repeated .rv.data.VideoInput inputs = 1;
}

message RecordRequest {
  message Resi {
    uint32 gop = 1;
    double segmentSize = 2;
    string destinationGroupId = 3;
    uint32 bufSize = 4;
    uint32 minRate = 5;
    uint32 maxRate = 6;
    string eventName = 7;
    string social_description = 8;
  }

  .rv.data.Recording.Stream stream = 1;
  .rv.data.URL working_directory = 2;
  .rv.data.RecordRequest.Resi resi = 3;
}

message TextSegmentRequest {
  message Segment {
    uint32 index = 1;
    double size = 2;
  }

  repeated .rv.data.TextSegmentRequest.Segment segments = 1;
  double start_position = 2;
}

message TriggerCue {
  message PresentationCue {
    .rv.data.Presentation presentation = 1;
    .rv.data.UUID arrangement_id = 2;
    int32 cue_index = 3;
  }

  uint64 trigger_handle = 1;
  .rv.data.TriggerOptions trigger_options = 2;
  .rv.data.Cue cue = 3;
  .rv.data.TriggerCue.PresentationCue presentation = 4;
  .rv.data.Playlist playlist = 5;
  uint64 client_data = 6;
}

message NetworkTriggerDataItem {
  .rv.data.TriggerOptions trigger_options = 3;
  .rv.data.TriggerCue trigger_cue = 4;
  oneof Type {
    .rv.data.Action action = 1;
    .rv.data.Cue cue = 2;
  }
}

message SlideElementTextRenderInfo {
  message Layer {
    .rv.data.SlideElementTextRenderInfo.LayerType layer_type = 1;
    int32 text_build_index = 5;
    oneof AdvancedFill {
      .rv.data.Graphics.Text.CutOutFill cut_out_fill = 2;
      .rv.data.Graphics.Text.MediaFill media_fill = 3;
      .rv.data.Graphics.BackgroundEffect background_effect = 4;
    }
  }

  enum LayerType {
    LAYER_TYPE_COMPOSITE = 0;
    LAYER_TYPE_MASK = 1;
    LAYER_TYPE_OVER = 2;
    LAYER_TYPE_UNDER = 3;
  }

  repeated .rv.data.SlideElementTextRenderInfo.Layer layers = 1;
}

message ValidateEncoderRequest {
  .rv.data.Recording.Stream.Encoder encoder = 1;
}

message ValidateEncoderResponse {
  bool is_valid = 1;
}

message CaptureActionRequest {
  message StartResi {
  }

  message StopCapture {
  }

  message Error {
    int32 error_code = 1;
    .rv.data.Action.CaptureType capture_action = 2;
  }

  oneof RequestType {
    .rv.data.CaptureActionRequest.StartResi start_resi = 1;
    .rv.data.CaptureActionRequest.StopCapture stop_capture = 2;
    .rv.data.CaptureActionRequest.Error error = 3;
  }
}

message CaptureActionResponse {
  message CancelCaptureAction {
  }

  message StartResi {
    string event_name = 1;
    string event_description = 2;
  }

  message StopCapture {
    bool stop_capture = 1;
  }

  oneof ResponseType {
    .rv.data.CaptureActionResponse.StartResi start_resi = 1;
    .rv.data.CaptureActionResponse.StopCapture stop_capture = 2;
    .rv.data.CaptureActionResponse.CancelCaptureAction cancel_capture_action = 3;
  }
}

message MacroIcons {
  message MacroIcon {
    .rv.data.MacrosDocument.Macro.ImageType image_type = 1;
    bytes image_data = 2;
  }

  repeated .rv.data.MacroIcons.MacroIcon icons = 1;
}

message GenericEvent {
}

message SendData {
  int32 message_id = 1;
  oneof MessageType {
    .rv.data.ProPresenterWorkspace workspace = 2;
    .rv.data.Stage.Document stage_document = 3;
    .rv.data.TimersDocument timers_document = 4;
    .rv.data.ValidateEncoderRequest validate_encoder_request = 5;
    .rv.data.TriggerCue trigger_cue = 6;
    .rv.data.DigitalAudio.Setup digital_audio_setup = 7;
    .rv.data.MacrosDocument macros_document = 8;
    .rv.data.MessageDocument message_document = 9;
    .rv.data.PropDocument prop_document = 10;
    .rv.data.CCLIDocument ccli_document = 11;
    .rv.data.AudienceLookCollection audience_looks = 12;
    .rv.data.ProAudienceLook live_audience_look = 13;
    .rv.data.MaskCollection masks = 14;
    .rv.data.Recording.SettingsDocument recording_settings_document = 15;
    .rv.data.CaptureActionResponse capture_action_response = 16;
    .rv.data.CopyrightLayout copyright_layout = 17;
    .rv.data.Transition global_background_transition = 18;
    .rv.data.Transition global_messages_transition = 19;
    .rv.data.Transition global_foreground_transition = 20;
    .rv.data.Transition global_bible_transition = 21;
    .rv.data.Transition global_props_transition = 22;
    .rv.data.Transition global_audio_transition = 23;
    .rv.data.Preferences preferences = 24;
    .rv.data.TestPatternRequest test_pattern = 25;
    .rv.data.GenericEvent startup_complete = 26;
    .rv.data.PlaylistDocument visual_playlist_doc = 27;
    .rv.data.PlaylistDocument audio_playlist_doc = 28;
    .rv.data.GenericEvent kill_watchdog = 29;
    .rv.data.MacroIcons macro_icons = 30;
    .rv.data.GenericEvent debug_trigger_data_dump = 31;
    .rv.data.PlaylistDocument library_playlist_doc = 32;
    .rv.data.UUID audio_playlist_focus_uuid = 33;
  }
}

message TimerRuntimeState {
  enum ResourceState {
    PREROLLING = 0;
    ACTIVATED = 1;
    UPDATED = 2;
    DEACTIVATED = 3;
    RELEASED = 4;
  }

  .rv.data.UUID timer_uuid = 1;
  string timer_name = 2;
  .rv.data.Action.TimerType action_type = 3;
  bool is_running = 4;
  bool has_overrun = 5;
  .rv.data.TimerRuntimeState.ResourceState state = 6;
  double current_time = 7;
}

message TimerStateUpdate {
  .rv.data.Timer timer = 1;
  .rv.data.TimerRuntimeState state = 2;
}

message HandledException {
  string description = 1;
}

message CoreDataStateDump {
  .rv.data.MacrosDocument macros = 1;
}

message SendDataResponse {
  int32 message_id = 1;
  oneof MessageType {
    .rv.data.ValidateEncoderResponse validate_encoder_response = 2;
    .rv.data.TimerStateUpdate timer_state = 3;
    .rv.data.CaptureActionRequest capture_action_request = 4;
    .rv.data.TestPatternResponse test_pattern = 5;
    .rv.data.HandledException handled_exception = 6;
    .rv.data.CoreDataStateDump test_state_dump = 7;
    .rv.data.UUID audio_playlist_focus_uuid = 8;
    .rv.data.UUID audio_playlist_item_triggered_uuid = 9;
  }
}

message TriggerTransferRenderState {
  message TimerState {
    .rv.data.Timer timer = 1;
    bool is_running = 2;
    bool has_overrun = 3;
    float value = 4;
  }

  message MediaState {
    .rv.data.Media current_media = 1;
    bool is_playing = 2;
    bool is_looping = 3;
    float current_time = 4;
    float time_remaining = 5;
    .rv.data.UUID playlist_uuid = 6;
    string playlist_name = 7;
    repeated .rv.data.Action.MediaType.PlaybackMarker markers = 8;
  }

  message CaptureState {
    enum Status {
      Stopped = 0;
      Active = 1;
      Caution = 2;
      Error = 3;
    }

    .rv.data.TriggerTransferRenderState.CaptureState.Status status = 1;
    float time = 2;
  }

  message AutoAdvanceState {
    bool active = 1;
    float remaining_time = 2;
  }

  message TimelineState {
    bool active = 1;
    float current_time = 2;
    int32 last_slide_index = 3;
  }

  message SlideState {
    .rv.data.Presentation presentation = 1;
    .rv.data.Playlist playlist = 2;
    .rv.data.UUID current_cue = 3;
    .rv.data.UUID next_cue = 4;
    .rv.data.TriggerTransferRenderState.AutoAdvanceState auto_advance = 5;
    .rv.data.TriggerTransferRenderState.TimelineState timeline_state = 6;
    int32 current_cue_index = 7;
    int32 current_playlist_index = 8;
  }

  message TimecodeState {
    enum Status {
      Stopped = 0;
      Playing = 1;
      Error = 2;
    }

    .rv.data.TriggerTransferRenderState.TimecodeState.Status status = 1;
    float time = 2;
  }

  .rv.data.Slide slide = 1;
  string stage_message = 2;
  .rv.data.TriggerTransferRenderState.MediaState presentation_media = 3;
  .rv.data.TriggerTransferRenderState.MediaState announcement_media = 4;
  .rv.data.TriggerTransferRenderState.MediaState audio_media = 5;
  .rv.data.Media live_video_media = 6;
  .rv.data.TriggerTransferRenderState.SlideState presentation = 7;
  .rv.data.TriggerTransferRenderState.SlideState announcement = 8;
  repeated .rv.data.TriggerTransferRenderState.TimerState timers = 9;
  .rv.data.TriggerTransferRenderState.CaptureState capture = 10;
  .rv.data.TriggerTransferRenderState.TimecodeState timecode = 11;
  uint64 system_time = 12;
}

