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

#include "debugd/src/battery_tool.h"

#include <unistd.h>

#include "debugd/src/process_with_id.h"
#include "debugd/src/process_with_output.h"

namespace {

const char kBatteryFirmware[] = "/usr/sbin/ec_sb_firmware_update";
const char kEcTool[] = "/usr/sbin/ectool";
const char kUnsupportedMessage[] =
    "Sorry, but this command is unavailable on this device.";

}  // namespace


namespace debugd {

std::string BatteryTool::BatteryFirmware(const std::string& option) {
  const char *tool_name;
  std::string output;
  ProcessWithOutput process;
  // Disabling sandboxing since battery requires higher privileges.
  process.DisableSandbox();
  if (!process.Init())
    return "<process init failed>";

  if (option == "info") {
    tool_name = kEcTool;
    process.AddArg(tool_name);
    process.AddArg("battery");
  } else if (option == "update") {
    tool_name = kBatteryFirmware;
    process.AddArg(tool_name);
    process.AddArg("update");
  } else if (option == "check") {
    tool_name = kBatteryFirmware;
    process.AddArg(tool_name);
    process.AddArg("check");
  } else {
    return "<process invalid option>";
  }
  if (access(tool_name, F_OK) != 0)
    return kUnsupportedMessage;

  process.Run();
  process.GetOutput(&output);
  return output;
}

}  // namespace debugd
