syntax = "proto3";

package rv.data;

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

import "action.proto";
import "cue.proto";
import "graphicsData.proto";
import "groups.proto";
import "labels.proto";
import "proClockSource.proto";
import "url.proto";

message Preferences {
  message General {
    bool house_of_worship_integrations = 1;
    bool crash_reports = 2;
    bool analytics = 3;
    string logo_path = 4;
    string language = 5;
  }

  message Screens {
    bool enable_at_launch = 1;
    bool show_performance_stats = 2;
    bool ignore_background_colors = 3;
    .rv.data.ProClockSource clock_source = 4;
    bool show_keynote_and_powerpoint = 5;
    bool disable_blackmagic_sync_groups = 6;
    bool use_directx_rendering = 7;
  }

  message Import {
    message Image {
      message Duration {
        message None {
        }

        message Time {
          double time = 1;
        }

        message Random {
          double minimum_time = 1;
          double maximum_time = 2;
        }

        oneof DurationType {
          .rv.data.Preferences.Import.Image.Duration.None none = 1;
          .rv.data.Preferences.Import.Image.Duration.Time time = 2;
          .rv.data.Preferences.Import.Image.Duration.Random random = 3;
        }
      }

      .rv.data.Action.LayerType layer_type = 1;
      .rv.data.Preferences.Import.Image.Duration duration = 2;
      .rv.data.Cue.CompletionTargetType next_behavior = 3;
    }

    message Video {
      .rv.data.Action.LayerType layer_type = 1;
      .rv.data.Media.TransportProperties.PlaybackBehavior playback_behavior = 2;
      .rv.data.Media.VideoProperties.EndBehavior end_behavior = 3;
      .rv.data.Cue.CompletionTargetType next_behavior = 4;
    }

    message Audio {
      .rv.data.Media.TransportProperties.PlaybackBehavior playback_behavior = 1;
      .rv.data.Cue.CompletionTargetType next_behavior = 2;
    }

    .rv.data.Media.ScaleBehavior foreground_scaling = 1;
    bool foreground_is_blurred = 6;
    .rv.data.Media.ScaleBehavior background_scaling = 2;
    bool background_is_blurred = 7;
    .rv.data.Preferences.Import.Image image = 3;
    .rv.data.Preferences.Import.Video video = 4;
    .rv.data.Preferences.Import.Audio audio = 5;
  }

  message Groups {
    .rv.data.ProGroupsDocument groups = 1;
    .rv.data.ProLabelsDocument labels = 2;
  }

  message Network {
    message Network {
      bool enable = 1;
      string name = 2;
      uint32 port = 3;
    }

    message Remotes {
      message ProRemote {
        bool enable = 1;
        bool enable_controller = 2;
        string controller_password = 3;
        bool enable_observer = 4;
        string observer_password = 5;
      }

      message StageApp {
        bool enable = 1;
        string password = 2;
      }

      .rv.data.Preferences.Network.Remotes.ProRemote pro_remote = 1;
      .rv.data.Preferences.Network.Remotes.StageApp stage_app = 2;
    }

    message Link {
      bool enable = 1;
      string link_group = 2;
    }

    .rv.data.Preferences.Network.Network network = 1;
    .rv.data.Preferences.Network.Remotes remotes = 2;
    .rv.data.Preferences.Network.Link link = 3;
  }

  message Sync {
    enum SyncDirection {
      SYNC_DOWN = 0;
      SYNC_UP = 1;
    }

    string repository = 1;
    bool include_libraries = 2;
    bool include_media = 3;
    bool include_playlists = 4;
    bool include_themes = 5;
    bool include_support_files = 6;
    .rv.data.Preferences.Sync.SyncDirection direction = 7;
    bool replace_destination_files = 8;
  }

  message Advanced {
    message NDIDiscovery {
      bool show_local_sources = 1;
      string receive_groups = 2;
      string additional_search_ips = 3;
    }

    message SearchPaths {
      message Path {
        bool enable = 1;
        string name = 2;
        string path = 3;
        .rv.data.URL.LocalRelativePath.Root url_root = 4;
      }

      bool automatically_relink = 1;
      repeated .rv.data.Preferences.Advanced.SearchPaths.Path paths = 2;
    }

    enum AudioForegroundMediaBehavior {
      IGNORE_FOREGROUND_MEDIA = 0;
      CLEAR_FOR_ALL_MEDIA = 1;
      CLEAR_IF_AUDIO = 2;
      PAUSE_FOR_ALL_MEDIA = 3;
      PAUSE_IF_AUDIO = 4;
    }

    bool suppress_auto_start = 1;
    .rv.data.Preferences.Advanced.AudioForegroundMediaBehavior presentation_audio_behavior = 2;
    .rv.data.Preferences.Advanced.AudioForegroundMediaBehavior announcements_audio_behavior = 3;
    .rv.data.Preferences.Advanced.NDIDiscovery ndi_discovery = 4;
    string support_files_path = 5;
    bool manage_media_automatically = 6;
    .rv.data.Preferences.Advanced.SearchPaths search_paths = 7;
  }

  message Updates {
    enum Channel {
      production = 0;
      beta = 1;
    }

    bool notify_when_available = 1;
    .rv.data.Preferences.Updates.Channel update_channel = 2;
  }

  .rv.data.Preferences.General general = 1;
  .rv.data.Preferences.Screens screens = 2;
  .rv.data.Preferences.Import import = 3;
  .rv.data.Preferences.Groups groups = 4;
  .rv.data.Preferences.Network network = 5;
  .rv.data.Preferences.Sync sync = 6;
  .rv.data.Preferences.Advanced advanced = 7;
  .rv.data.Preferences.Updates updates = 8;
}

