// Copyright 2022 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_ASH_CROSAPI_FILES_APP_LAUNCHER_H_
#define CHROME_BROWSER_ASH_CROSAPI_FILES_APP_LAUNCHER_H_

#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/apps/app_service/app_service_proxy_forward.h"
#include "components/services/app_service/public/cpp/app_registry_cache.h"
#include "components/services/app_service/public/cpp/instance_registry.h"

namespace crosapi {

// Launches files.app. This can be used to handle initialization timing.
// Also, this handles switching files.app to SWA.
class FilesAppLauncher : public apps::AppRegistryCache::Observer,
                         public apps::InstanceRegistry::Observer {
 public:
  explicit FilesAppLauncher(apps::AppServiceProxy* proxy);
  FilesAppLauncher(const FilesAppLauncher&) = delete;
  FilesAppLauncher& operator=(const FilesAppLauncher&) = delete;
  ~FilesAppLauncher() override;

  // Launches the files app if necessary.
  // If it is already launched, |callback| is immediately called.
  // This should not be called, if there was another invocation of Launch(),
  // and it is not yet completed.
  void Launch(base::OnceClosure callback);

 private:
  // Triggers to launch files.app.
  void LaunchInternal();

  // apps::AppRegistryCache::Observer override.
  void OnAppUpdate(const apps::AppUpdate& update) override;
  void OnAppRegistryCacheWillBeDestroyed(
      apps::AppRegistryCache* cache) override;

  // apps::InstanceRegistryCache::Observer override.
  void OnInstanceUpdate(const apps::InstanceUpdate& update) override;
  void OnInstanceRegistryWillBeDestroyed(
      apps::InstanceRegistry* cache) override;

  const raw_ptr<apps::AppServiceProxy, ExperimentalAsh> proxy_;

  base::OnceClosure callback_;

  base::WeakPtrFactory<FilesAppLauncher> weak_factory_{this};
};

}  // namespace crosapi

#endif  // CHROME_BROWSER_ASH_CROSAPI_FILES_APP_LAUNCHER_H_
