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

#ifndef CHROMEOS_SYSTEM_CPU_TEMPERATURE_READER_H_
#define CHROMEOS_SYSTEM_CPU_TEMPERATURE_READER_H_

#include <string>
#include <utility>
#include <vector>

#include "base/files/file_path.h"
#include "base/macros.h"
#include "chromeos/chromeos_export.h"

namespace chromeos {
namespace system {

// Used to read CPU temperature info from sysfs hwmon.
class CHROMEOS_EXPORT CPUTemperatureReader {
 public:
  // Contains info from a CPU temperature sensor.
  struct CPUTemperatureInfo {
    CPUTemperatureInfo();
    ~CPUTemperatureInfo();

    bool operator<(const CPUTemperatureInfo& other) const {
      return std::make_pair(label, temp_celsius) <
             std::make_pair(other.label, other.temp_celsius);
    }

    // The temperature read by a CPU temperature sensor in degrees Celsius.
    double temp_celsius;

    // The name of the CPU temperature zone monitored by this sensor. Used to
    // identify the source of each temperature reading. Taken from sysfs "name"
    // or "label" field, if it exists.
    std::string label;
  };

  CPUTemperatureReader();
  ~CPUTemperatureReader();

  void set_hwmon_dir_for_test(const base::FilePath& dir) { hwmon_dir_ = dir; }

  // Reads temperature from each thermal sensor of the CPU. Returns a vector
  // containing a reading from each sensor. This is a blocking function that
  // should be run on a thread that allows blocking operations.
  std::vector<CPUTemperatureInfo> GetCPUTemperatures();

 private:
  // Sysfs hwmon directory path.
  base::FilePath hwmon_dir_;

  DISALLOW_COPY_AND_ASSIGN(CPUTemperatureReader);
};

}  // namespace system
}  // namespace chromeos

#endif  // CHROMEOS_SYSTEM_CPU_TEMPERATURE_READER_H_
