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

#import "ios/chrome/browser/tabs/model/tab_title_util.h"

#import <Foundation/Foundation.h>

#import "base/strings/sys_string_conversions.h"
#import "components/strings/grit/components_strings.h"
#import "ios/chrome/browser/download/model/download_manager_tab_helper.h"
#import "ios/web/public/navigation/navigation_item.h"
#import "ios/web/public/navigation/navigation_manager.h"
#import "ios/web/public/web_state.h"
#import "ui/base/l10n/l10n_util.h"

namespace tab_util {
namespace {

// Returns whether `web_state` only has a download in-progress.
bool WebStateHasDownloadInProgress(const web::WebState* web_state) {
  if (!web_state->IsRealized()) {
    return false;
  }

  const web::NavigationManager* navigation_manager =
      web_state->GetNavigationManager();
  if (!navigation_manager) {
    return false;
  }

  if (navigation_manager->GetVisibleItem()) {
    return false;
  }

  const DownloadManagerTabHelper* download_tab_helper =
      DownloadManagerTabHelper::FromWebState(web_state);
  if (!download_tab_helper) {
    return false;
  }

  return download_tab_helper->has_download_task();
}

}  // namespace

NSString* GetTabTitle(const web::WebState* web_state) {
  if (WebStateHasDownloadInProgress(web_state)) {
    return l10n_util::GetNSString(IDS_DOWNLOAD_TAB_TITLE);
  }

  const std::u16string& title = web_state->GetTitle();
  if (!title.empty()) {
    return base::SysUTF16ToNSString(title);
  }

  return l10n_util::GetNSString(IDS_DEFAULT_TAB_TITLE);
}

}  // namespace tab_util
