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

#ifndef AUTHPOLICY_POLICY_PREG_POLICY_ENCODER_H_
#define AUTHPOLICY_POLICY_PREG_POLICY_ENCODER_H_

#include <memory>
#include <string>
#include <vector>

namespace base {
class FilePath;
}  // namespace base

namespace enterprise_management {
class CloudPolicySettings;
class ChromeDeviceSettingsProto;
}  // namespace enterprise_management

namespace authpolicy {
namespace protos {
class ExtensionPolicy;
}  // namespace protos
}  // namespace authpolicy

namespace policy {

using ExtensionPolicies = std::vector<authpolicy::protos::ExtensionPolicy>;

// Loads the given set of |preg_files| and encodes all user policies into the
// given |policy| protobuf. Note that user policy can contain mandatory and
// recommended policies. If multiple files f1,...,fN are passed in, policies
// are merged with following rules:
// - Mandatory policies in fn overwrite mandatory policies in fm if n > m.
// - Recommended policies in fn overwrite recommended policies in fm if n > m.
// - Mandatory policies always overwrite recommended policies.
// Thus, a mandatory policy in f1 will overwrite a recommended policy in f3,
// even though f3 has the higher index.
// |log_policy_values| toggles debug logging of policy values.
bool ParsePRegFilesIntoUserPolicy(
    const std::vector<base::FilePath>& preg_files,
    enterprise_management::CloudPolicySettings* policy,
    bool log_policy_values);

// Loads the given set of |preg_files| and encodes all device policies into the
// given |policy| protobuf. If multiple files f1,...,fN are passed in, policies
// are merged with following rule:
// - Policies in fn overwrite policies in fm if n > m.
// |log_policy_values| toggles debug logging of policy values.
bool ParsePRegFilesIntoDevicePolicy(
    const std::vector<base::FilePath>& preg_files,
    enterprise_management::ChromeDeviceSettingsProto* policy,
    bool log_policy_values);

// Loads the given set of |preg_files| and encodes all extension policies into
// the given |policies| vector. If multiple files f1,...,fN are passed in,
// policies are merged with following rule:
// - Policies in fn overwrite policies in fm if n > m.
// |log_policy_values| toggles debug logging of policy values.
bool ParsePRegFilesIntoExtensionPolicy(
    const std::vector<base::FilePath>& preg_files,
    ExtensionPolicies* policies,
    bool log_policy_values);

}  // namespace policy

#endif  // AUTHPOLICY_POLICY_PREG_POLICY_ENCODER_H_
