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

#include "chrome/browser/web_applications/app_service/publisher_helper.h"

#include "chrome/browser/web_applications/web_app_provider.h"
#include "chrome/browser/web_applications/web_app_registrar.h"
#include "components/services/app_service/public/cpp/app_types.h"
#include "components/webapps/browser/installable/installable_metrics.h"

#if BUILDFLAG(IS_CHROMEOS)
#include "chrome/browser/apps/app_service/app_service_proxy.h"
#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
#include "chromeos/constants/chromeos_features.h"
#endif

namespace web_app {

webapps::WebappUninstallSource ConvertUninstallSourceToWebAppUninstallSource(
    apps::UninstallSource uninstall_source) {
  switch (uninstall_source) {
    case apps::UninstallSource::kAppList:
      return webapps::WebappUninstallSource::kAppList;
    case apps::UninstallSource::kAppManagement:
      return webapps::WebappUninstallSource::kAppManagement;
    case apps::UninstallSource::kShelf:
      return webapps::WebappUninstallSource::kShelf;
    case apps::UninstallSource::kMigration:
      return webapps::WebappUninstallSource::kUninstallAndReplaceMigration;
    case apps::UninstallSource::kUnknown:
      return webapps::WebappUninstallSource::kUnknown;
  }
}

#if BUILDFLAG(IS_CHROMEOS)
std::vector<std::string> GetWebAppIdsForProtocolUrl(Profile* profile,
                                                    const GURL& protocol_url) {
  if (!apps::AppServiceProxyFactory::IsAppServiceAvailableForProfile(profile)) {
    return {};
  }
  auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile);
  std::vector<std::string> app_ids = proxy->GetAppIdsForUrl(protocol_url);
  std::erase_if(app_ids, [&](const auto& app_id) {
    return proxy->AppRegistryCache().GetAppType(app_id) != apps::AppType::kWeb;
  });
  return app_ids;
}
#endif

}  // namespace web_app
