// 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.

#ifndef CHROME_BROWSER_UI_BROWSER_MANAGER_SERVICE_H_
#define CHROME_BROWSER_UI_BROWSER_MANAGER_SERVICE_H_

#include <memory>
#include <vector>

#include "base/callback_list.h"
#include "base/memory/raw_ptr.h"
#include "base/observer_list.h"
#include "chrome/browser/ui/browser_window/public/profile_browser_collection.h"
#include "components/keyed_service/core/keyed_service.h"

class Browser;
class BrowserWindowInterface;
class Profile;

// BrowserManagerService is responsible for owning and destroying Browser object
// instances for a given Profile.
// TODO(crbug.com/431671448): Expand this API to support
// browser_window_interface_iterator functionality (such as tracking Browsers in
// order of activation per-profile).
class BrowserManagerService : public KeyedService,
                              public ProfileBrowserCollection {
 public:
  explicit BrowserManagerService(Profile* profile);
  ~BrowserManagerService() override;

  // KeyedService:
  void Shutdown() override;

  // Adds a new Browser to be owned by the service.
  void AddBrowser(std::unique_ptr<Browser> browser);

  // Destroys `browser` if owned and managed by the service.
  void DeleteBrowser(Browser* browser);

 private:
  // ProfileBrowserCollection:
  void AddObserver(BrowserCollectionObserver* observer) override;
  void RemoveObserver(BrowserCollectionObserver* observer) override;

  // Called when a browser in this profile became active.
  void OnBrowserActivated(BrowserWindowInterface* browser);

  // Called when a browser in this profile became inactive.
  void OnBrowserDeactivated(BrowserWindowInterface* browser);

  // Profile associated with this service.
  const raw_ptr<Profile> profile_;

  // We need to hold 2 subscriptions for each Browser: one for DidBecomeActive
  // and one for DidBecomeInactive.
  using BrowserAndSubscriptions =
      std::pair<std::unique_ptr<Browser>,
                std::pair<base::CallbackListSubscription,
                          base::CallbackListSubscription>>;
  std::vector<BrowserAndSubscriptions> browsers_and_subscriptions_;

  // A list of observers which will be notified of every browser addition and
  // removal across all browsers in this profile.
  base::ObserverList<BrowserCollectionObserver> observers_;
};

#endif  // CHROME_BROWSER_UI_BROWSER_MANAGER_SERVICE_H_
