// 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/variations/net/variations_command_line.h"

#include "base/base_switches.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial.h"
#include "components/variations/field_trial_config/field_trial_util.h"
#include "components/variations/variations_switches.h"
#include "net/base/escape.h"

namespace variations {

namespace {

// Format the provided |param_key| and |param_value| as commandline input.
std::string GenerateParam(const std::string& param_key,
                          const std::string& param_value) {
  if (!param_value.empty())
    return " --" + param_key + "=\"" + param_value + "\"";

  return "";
}

}  // namespace

std::string GetVariationsCommandLine() {
  std::string field_trial_states;
  base::FieldTrialList::AllStatesToString(&field_trial_states, true);

  std::string field_trial_params =
      base::FieldTrialList::AllParamsToString(true, &EscapeValue);

  std::string enable_features;
  std::string disable_features;
  base::FeatureList::GetInstance()->GetFeatureOverrides(&enable_features,
                                                        &disable_features);

  std::string output;
  output.append(
      GenerateParam(::switches::kForceFieldTrials, field_trial_states));
  output.append(
      GenerateParam(switches::kForceFieldTrialParams, field_trial_params));
  output.append(GenerateParam(::switches::kEnableFeatures, enable_features));
  output.append(GenerateParam(::switches::kDisableFeatures, disable_features));
  return output;
}

}  // namespace variations
