// Copyright 2019 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 POWER_MANAGER_COMMON_BATTERY_PERCENTAGE_CONVERTER_H_
#define POWER_MANAGER_COMMON_BATTERY_PERCENTAGE_CONVERTER_H_

#include <memory>

#include <base/macros.h>

namespace power_manager {

class PrefsInterface;

// Converts actual battery percentage to display battery percentage and vice
// versa.
class BatteryPercentageConverter {
 public:
  static std::unique_ptr<BatteryPercentageConverter> CreateFromPrefs(
      PrefsInterface* prefs);

  BatteryPercentageConverter(double low_battery_shutdown_percent,
                             double full_factor);
  ~BatteryPercentageConverter();

  // Converts actual battery percentage to the battery percentage which will be
  // displayed to the user. Returns value in the range [0.0, 100.0].
  double ConvertActualToDisplay(double actual_percentage) const;

  // Converts displayed battery percentage to the actual battery percentage.
  // Returns value in the range [0.0, 100.0].
  double ConvertDisplayToActual(double display_percentage) const;

 private:
  // Remaining battery percentage at which the system will shut down
  // automatically. 0.0 if unset. Initialized from
  // |kLowBatteryShutdownPercentPref|.
  const double low_battery_shutdown_percent_ = 0.0;

  // The fraction of the full charge at which the battery is considered full,
  // in the range (0.0, 1.0]. Initialized from |kPowerSupplyFullFactorPref|.
  const double full_factor_ = 1.0;

  DISALLOW_COPY_AND_ASSIGN(BatteryPercentageConverter);
};

}  // namespace power_manager

#endif  // POWER_MANAGER_COMMON_BATTERY_PERCENTAGE_CONVERTER_H_
