syntax = "proto3";

package rv.data;

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

import "applicationInfo.proto";
import "uuid.proto";

message Clock {
  message Format {
    reserved 1;
    enum DateFormatterStyle {
      DATE_FORMATTER_STYLE_NONE = 0;
      DATE_FORMATTER_STYLE_SHORT = 1;
      DATE_FORMATTER_STYLE_MEDIUM = 2;
      DATE_FORMATTER_STYLE_LONG = 3;
      DATE_FORMATTER_STYLE_FULL = 4;
    }

    .rv.data.Clock.Format.DateFormatterStyle date_type = 2;
    .rv.data.Clock.Format.DateFormatterStyle time_format = 3;
    bool military_time_enabled = 4;
  }

  string format = 1;
}

message Timer {
  reserved 3;
  reserved 4;
  reserved 5;
  reserved 6;
  reserved 7;
  reserved 8;
  reserved 9;
  message Format {
    enum Style {
      STYE_NONE = 0;
      STYLE_SHORT = 1;
      STYLE_LONG = 2;
      STYLE_REMOVE_SHORT = 3;
      STYLE_REMOVE_LONG = 4;
    }

    .rv.data.Timer.Format.Style hour = 1;
    .rv.data.Timer.Format.Style minute = 2;
    .rv.data.Timer.Format.Style second = 3;
    .rv.data.Timer.Format.Style millisecond = 4;
    bool is_wall_clock_time = 5;
    bool is_24_hour_time = 6;
    bool show_milliseconds_under_minute_only = 7;
  }

  message Configuration {
    message TimerTypeCountdown {
      double duration = 1;
    }

    message TimerTypeCountdownToTime {
      enum TimePeriod {
        TIME_PERIOD_AM = 0;
        TIME_PERIOD_PM = 1;
        TIME_PERIOD_24 = 2;
      }

      double time_of_day = 1;
      .rv.data.Timer.Configuration.TimerTypeCountdownToTime.TimePeriod period = 2;
    }

    message TimerTypeElapsedTime {
      double start_time = 1;
      double end_time = 2;
      bool has_end_time = 3;
    }

    bool allows_overrun = 4;
    oneof TimerType {
      .rv.data.Timer.Configuration.TimerTypeCountdown countdown = 1;
      .rv.data.Timer.Configuration.TimerTypeCountdownToTime countdown_to_time = 2;
      .rv.data.Timer.Configuration.TimerTypeElapsedTime elapsed_time = 3;
    }
  }

  .rv.data.UUID uuid = 1;
  string name = 2;
  .rv.data.Timer.Configuration configuration = 10;
}

message TimersDocument {
  .rv.data.ApplicationInfo application_info = 1;
  .rv.data.Clock clock = 2;
  repeated .rv.data.Timer timers = 3;
}

