// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// If you change or add any fields in this file, update proto_visitors.h and
// potentially proto_enum_conversions.{h, cc}.

syntax = "proto2";

option java_multiple_files = true;
option java_package = "org.chromium.components.sync.protocol";

option optimize_for = LITE_RUNTIME;

package sync_pb;

// Account-local metadata for shared tab groups.
// LINT.IfChange(SharedTabGroupAccountDataSpecifics)
message SharedTabGroupAccountDataSpecifics {
  // The guid of this entity.
  // This could be the SharedTab guid (see SharedTabGroupDataSpecifics)
  // or the SharedTabGroup guid.
  optional string guid = 1;

  // The collaboration group.
  optional string collaboration_id = 2;

  // Entities that contains information for a tab or a tab group.
  oneof entity {
    SharedTabDetails shared_tab_details = 3;
    SharedTabGroupDetails shared_tab_group_details = 4;
  }

  // Timestamp when the message is updated.
  optional int64 update_time_windows_epoch_micros = 5;

  // A mechanism to identify the client version that wrote this specifics.
  // Designed to aid business logic when reading newly added fields that
  // didn't exist in older clients.
  // The client version must be incremented whenever a new field is added to the
  // specifics.
  optional int32 version = 6;
}

// Stores account-specific metadata about a shared tab.
message SharedTabDetails {
  // The GUID of the SharedTabGroup this is a member of. This is the same
  // as that from SharedTab in SharedTabGroupDataSpecifics.
  optional string shared_tab_group_guid = 1;

  // Last time this tab was focused.
  optional int64 last_seen_timestamp_windows_epoch = 2;
}

// The fields in this message are equivalent to and compared against the fields
// of the same name in message SavedTabGroup in saved_tab_group_specifics.proto.
message SharedTabGroupDetails {
  // Position of the pinned tab group in bookmark bar on Desktop. This will be
  // replaced by the projects_position when the projects panel is launched.
  optional int64 pinned_position = 1;

  // Position of the tab group in the projects panel on Desktop. This will
  // replace the pinned_position when the projects panel is launched.
  optional int64 projects_position = 2;
}
// LINT.ThenChange(//components/saved_tab_groups/internal/shared_tab_group_account_data_sync_bridge.cc:TrimSpecifics)
