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

#ifndef COMPONENTS_TAB_GROUPS_TAB_GROUP_ID_H_
#define COMPONENTS_TAB_GROUPS_TAB_GROUP_ID_H_

#include "base/component_export.h"
#include "base/token.h"

namespace tab_groups {

class COMPONENT_EXPORT(TAB_GROUPS) TabGroupId {
 public:
  static TabGroupId GenerateNew();

  // This should only called with |token| returned from a previous |token()|
  // call on a valid TabGroupId.
  static TabGroupId FromRawToken(base::Token token);

  // Should only be used if intending to populate the TabGroupId by reference,
  // using a valid existing ID. Primarily needed for the Tab Groups extensions
  // API.
  static TabGroupId CreateEmpty();

  TabGroupId(const TabGroupId& other);

  TabGroupId& operator=(const TabGroupId& other);

  bool operator==(const TabGroupId& other) const;
  bool operator!=(const TabGroupId& other) const;
  bool operator<(const TabGroupId& other) const;

  const base::Token& token() const { return token_; }

  bool is_empty() { return token_.is_zero(); }

  std::string ToString() const;

 private:
  explicit TabGroupId(base::Token token);

  base::Token token_;
};

}  // namespace tab_groups

#endif  // COMPONENTS_TAB_GROUPS_TAB_GROUP_ID_H_
