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

#include "chrome/browser/signin/profile_identity_provider.h"

#include "components/signin/core/browser/profile_oauth2_token_service.h"

#if !defined(OS_ANDROID)
#include "chrome/browser/ui/webui/signin/login_ui_service.h"
#endif

ProfileIdentityProvider::ProfileIdentityProvider(
    SigninManagerBase* signin_manager,
    ProfileOAuth2TokenService* token_service,
    LoginUIService* login_ui_service)
    : signin_manager_(signin_manager),
      token_service_(token_service),
      login_ui_service_(login_ui_service) {
  signin_manager_->AddObserver(this);
}

ProfileIdentityProvider::~ProfileIdentityProvider() {
  signin_manager_->RemoveObserver(this);
}

std::string ProfileIdentityProvider::GetActiveUsername() {
  return signin_manager_->GetAuthenticatedUsername();
}

std::string ProfileIdentityProvider::GetActiveAccountId() {
  return signin_manager_->GetAuthenticatedAccountId();
}

OAuth2TokenService* ProfileIdentityProvider::GetTokenService() {
  return token_service_;
}

bool ProfileIdentityProvider::RequestLogin() {
#if defined(OS_ANDROID)
  return false;
#else
  login_ui_service_->ShowLoginPopup();
  return true;
#endif
}

void ProfileIdentityProvider::GoogleSigninSucceeded(
    const std::string& username,
    const std::string& password) {
  FireOnActiveAccountLogin();
}

void ProfileIdentityProvider::GoogleSignedOut(const std::string& username) {
  FireOnActiveAccountLogout();
}
