// Copyright 2018 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 "components/signin/core/browser/device_id_helper.h"

#include "base/command_line.h"
#include "base/guid.h"
#include "base/logging.h"
#include "components/prefs/pref_service.h"
#include "components/signin/core/browser/signin_pref_names.h"
#include "components/signin/core/browser/signin_switches.h"

namespace signin {

#if !defined(OS_CHROMEOS)

std::string GetSigninScopedDeviceId(PrefService* prefs) {
  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
          switches::kDisableSigninScopedDeviceId)) {
    return std::string();
  }

  return GetOrCreateScopedDeviceId(prefs);
}

std::string RecreateSigninScopedDeviceId(PrefService* prefs) {
  std::string signin_scoped_device_id = GenerateSigninScopedDeviceId();
  DCHECK(!signin_scoped_device_id.empty());
  prefs->SetString(prefs::kGoogleServicesSigninScopedDeviceId,
                   signin_scoped_device_id);
  return signin_scoped_device_id;
}

std::string GenerateSigninScopedDeviceId() {
  return base::GenerateGUID();
}

std::string GetOrCreateScopedDeviceId(PrefService* prefs) {
  std::string signin_scoped_device_id =
      prefs->GetString(prefs::kGoogleServicesSigninScopedDeviceId);
  if (signin_scoped_device_id.empty()) {
    // If device_id doesn't exist then generate new and save in prefs.
    signin_scoped_device_id = RecreateSigninScopedDeviceId(prefs);
  }
  return signin_scoped_device_id;
}

#endif

}  // namespace signin
