chromium/ios/chrome/browser/ui/tab_switcher/tab_group_item.h

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

#ifndef IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_GROUP_ITEM_H_
#define IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_GROUP_ITEM_H_

#import <UIKit/UIKit.h>

@class TabGroupItem;

@class GroupTabInfo;
#ifdef __cplusplus
class TabGroup;
class WebStateList;
#endif

// Block invoked when a GroupTabInfo fetching operation completes. The
// `groupTabInfos` is nil if the operation failed.
typedef void (^GroupTabInfosFetchingCompletionBlock)(
    TabGroupItem* _Nullable item,
    NSArray<GroupTabInfo*>* _Nullable groupTabInfos);

// Model object representing an group item.
@interface TabGroupItem : NSObject

#ifdef __cplusplus
- (nonnull instancetype)initWithTabGroup:(const TabGroup* _Nonnull)tabGroup
                             webStateList:(WebStateList* _Nonnull)webStateList
    NS_DESIGNATED_INITIALIZER;
#endif
- (nonnull instancetype)init NS_UNAVAILABLE;

#ifdef __cplusplus
// Identifier of the group. Use this to compare two TabGroupItem objects.
@property(nonatomic, readonly, nonnull) const void* tabGroupIdentifier;
// If the underlying `TabGroup` object still exists, returns it.
// Otherwise, returns `nullptr`.
@property(nonatomic, readonly, nullable) const TabGroup* tabGroup;
#endif
@property(nonatomic, readonly, nullable) NSString* title;
@property(nonatomic, readonly, nullable) UIColor* groupColor;
@property(nonatomic, readonly, nullable) UIColor* foregroundColor;
@property(nonatomic, readonly) NSInteger numberOfTabsInGroup;
@property(nonatomic, readonly) BOOL collapsed;

// Fetches the groupTabInfos (pair of snapshots and favicons), calling
// `completion` on the calling sequence when the operation completes.
- (void)fetchGroupTabInfos:
    (nonnull GroupTabInfosFetchingCompletionBlock)completion;

@end

#endif  // IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_GROUP_ITEM_H_