import "playlist4content.proto";
import "playlist4issues.proto";
import "playlist4meta.proto";
import "playlist4ops.proto";

package spotify.playlist4.proto;

option optimize_for = SPEED;
option java_package = "com.spotify.playlist4.proto";

message ChangeInfo {
  optional string user = 1;
  optional int32 timestamp = 2;
  optional bool admin = 3;
  optional bool undo = 4;
  optional bool redo = 5;
  optional bool merge = 6;
  optional bool compressed = 7;
  optional bool migration = 8;
}
message Delta {
  optional bytes base_version = 1;
  repeated Op ops = 2;
  optional ChangeInfo info = 4;
}
message Merge {
  optional bytes base_version = 1;
  optional bytes merge_version = 2;
  optional ChangeInfo info = 4;
}
message ChangeSet {
  enum Kind {
    KIND_UNKNOWN = 0;
    DELTA = 2;
    MERGE = 3;
  };
  required Kind kind = 1;
  optional Delta delta = 2;
  optional Merge merge = 3;
}
message RevisionTaggedChangeSet {
  required bytes revision = 1;
  required ChangeSet change_set = 2;
}
message Diff {
  required bytes from_revision = 1;
  repeated Op ops = 2;
  required bytes to_revision = 3;
}
message ListDump {
  optional bytes latestRevision = 1;
  optional int32 length = 2;
  optional ListAttributes attributes = 3;
  optional ListChecksum checksum = 4;
  optional ListItems contents = 5;
  repeated Delta pendingDeltas = 7;
}
message ListChanges {
  optional bytes baseRevision = 1;
  repeated Delta deltas = 2;
  optional bool wantResultingRevisions = 3;
  optional bool wantSyncResult = 4;
  optional ListDump dump = 5;
  repeated int32 nonces = 6;
}
message SelectedListContent {
  optional bytes revision = 1;
  optional int32 length = 2;
  optional ListAttributes attributes = 3;
  optional ListChecksum checksum = 4;
  optional ListItems contents = 5;
  optional Diff diff = 6;

  optional Diff syncResult = 7;
  repeated bytes resultingRevisions = 8;

  optional bool multipleHeads = 9;

  optional bool upToDate = 10;

  repeated ClientResolveAction resolveAction = 12;
  repeated ClientIssue issues = 13;

  repeated int32 nonces = 14;
}
