// 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.

#ifndef CHROME_BROWSER_ASH_LOGIN_CONFIGURATION_KEYS_H_
#define CHROME_BROWSER_ASH_LOGIN_CONFIGURATION_KEYS_H_

#include "base/values.h"

namespace ash {
namespace configuration {
// Configuration keys that are used to automate OOBE screens go here.
// Please keep keys grouped by screens and ordered according to OOBE flow.

extern const char kLanguage[];
extern const char kInputMethod[];
extern const char kWelcomeNext[];
extern const char kEnableDemoMode[];

extern const char kDemoModePreferencesNext[];

extern const char kNetworkSelectGUID[];
extern const char kNetworkOfflineDemo[];
extern const char kNetworkUseConnected[];
extern const char kNetworkConfig[];

extern const char kDeviceRequisition[];

extern const char kEULASendUsageStatistics[];
extern const char kEULAAutoAccept[];

extern const char kArcTosAutoAccept[];

extern const char kRestoreAfterRollback[];
extern const char kEnrollmentAssetId[];
extern const char kEnrollmentLocation[];
extern const char kEnrollmentAutoAttributes[];
extern const char kEnrollmentToken[];
extern const char kSkipEnrollmentSuccessScreen[];
extern const char kSkipUpdateOptOutScreen[];
extern const char kSkipHIDScreen[];

extern const char kSource[];

enum class ConfigurationHandlerSide : unsigned int {
  HANDLER_JS,    // Handled by JS code
  HANDLER_CPP,   // Handled by C++ code
  HANDLER_BOTH,  // Used in both JS and C++ code
  HANDLER_DOC    // Not used by code, serves for documentation purposes only.
};

// Checks if configuration is valid (all fields have correct types, no extra
// fields).
bool ValidateConfiguration(const base::DictValue& configuration);

// Returns a dictionary with only fields handled by particular `side` from
// `configuration`.
base::DictValue FilterConfiguration(const base::DictValue& configuration,
                                    ConfigurationHandlerSide side);
}  // namespace configuration
}  // namespace ash

#endif  // CHROME_BROWSER_ASH_LOGIN_CONFIGURATION_KEYS_H_
